记录一下第一次安装和配置Nginx

news/2024/7/10 0:34:42 标签: nginx, linux, 运维, 反向代理, 负载均衡

文章目录

  • 前言
  • 安装 nginx
  • 查找nginx安装和配置文件的位置
  • 修改配置文件
  • 重启nginx服务
  • 查看报错
  • 负载均衡配置
    • 轮询
    • 权重
    • 最少连接
    • IP哈希
  • 总结

前言

Nginx虽不是第一次接触,但是使用较少,今天算是完整的安装了配置了一次,前段时间想写一写的《Nginx的安装与常用配置》,因突发状况没有写完,今天补充一下。

nginx_8">安装 nginx

nginx 安装比较方便,我安装的环境是拥有root权限的Ubuntu 20.04,安装只需要以下两个命令:

apt update
apt install nginx

安装完默认启动,查询运行状态的命令 systemctl status nginx

# systemctl status nginxnginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-03-14 21:09:35 CST; 2h 55min ago
       Docs: man:nginx(8)
    Process: 943307 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 943314 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 943315 (nginx)
      Tasks: 5 (limit: 9132)
     Memory: 10.6M
     CGroup: /system.slice/nginx.service
             ├─943315 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─943316 nginx: worker process
             ├─943317 nginx: worker process
             ├─943318 nginx: worker process
             └─943319 nginx: worker process

Mar 14 21:09:35 w-mi-dev systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 14 21:09:35 w-mi-dev snoopy[943307]: [hostname:w-mi-dev ssh:((undefined)) uid:0 username:root pid:943307 ppid:1 rpname:(nginx) sid:943307 tty:(none) cwd:/ filename:/usr/sbin/nginx]: /usr/sbin/ng>
Mar 14 21:09:35 w-mi-dev snoopy[943314]: [hostname:w-mi-dev ssh:((undefined)) uid:0 username:root pid:943314 ppid:1 rpname:(nginx) sid:943314 tty:(none) cwd:/ filename:/usr/sbin/nginx]: /usr/sbin/ng>
Mar 14 21:09:35 w-mi-dev systemd[1]: Started A high performance web server and a reverse proxy server.

要想测试的话通过浏览器访问 http://YOUR_IP,通常会看到 “Welcome to nginx” 字样的界面,但这对于我是没用的,我的默认端口访问不了。

nginx_45">查找nginx安装和配置文件的位置

我的nginx安装在 /usr/sbin/nginx 目录,配置文件主目录在 /etc/nginx/nginx.conf,找的方法比较简单就是用 which 命令

# which nginx
/usr/sbin/nginx

找配置文件时利用 nginx 检查配置文件的 -t 参数就可以了

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果使用 which 命令找不到,可以利用 ps -ef | grep nginx 找到进程id,在利用 ll /proc/nginx_pid 来找到安装的位置。

修改配置文件

进入 /etc/nginx 目录,可以看到多个配置文件和目录

# cd /etc/nginx/
# ll
total 64
drwxr-xr-x 2 root root 4096 Mar 14 20:56 conf.d/
-rw-r--r-- 1 root root 1077 Feb  4  2019 fastcgi.conf
-rw-r--r-- 1 root root 1007 Feb  4  2019 fastcgi_params
-rw-r--r-- 1 root root 2837 Feb  4  2019 koi-utf
-rw-r--r-- 1 root root 2223 Feb  4  2019 koi-win
-rw-r--r-- 1 root root 3957 Feb  4  2019 mime.types
drwxr-xr-x 2 root root 4096 Nov 10 14:38 modules-available/
drwxr-xr-x 2 root root 4096 Mar  9 21:30 modules-enabled/
-rw-r--r-- 1 root root 1490 Feb  4  2019 nginx.conf
-rw-r--r-- 1 root root  180 Feb  4  2019 proxy_params
-rw-r--r-- 1 root root  636 Feb  4  2019 scgi_params
drwxr-xr-x 2 root root 4096 Mar  9 21:30 sites-available/
drwxr-xr-x 2 root root 4096 Mar  9 21:30 sites-enabled/
drwxr-xr-x 2 root root 4096 Mar  9 21:30 snippets/
-rw-r--r-- 1 root root  664 Feb  4  2019 uwsgi_params
-rw-r--r-- 1 root root 3071 Feb  4  2019 win-utf

其中 nginx.conf 是主配置文件,内容如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

这个文件是默认的配置文件,我们可以先不管,先注意几点就行:

  • 访问日志在 /var/log/nginx/access.log
  • 错误日志在 /var/log/nginx/error.log
  • 主配置文件包含了 /etc/nginx/conf.d/*.conf 这个目录下所有配置

所以我们在 /etc/nginx/conf.d/ 目录下新建一个 project.conf 文件,编写如下内容:

upstream login_entrance {
    server localhost:4101;
    server localhost:4102;
}

upstream exit_entrance {
    server localhost:6101;
    server localhost:6102;
}

server {
    listen       4100;
    server_name  localhost;

    location / {

        proxy_pass http://login_entrance;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen       6100;
    server_name  localhost;

    location / {

        proxy_pass http://exit_entrance;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen      8100;
    server_name localhost;

    location / {
        root    /usr/share/nginx/html;
    }
}

配置文件的含义:

  • 访问 8100 端口可以看到 nginx 欢迎页
  • 将发送给4100端口的数据转发给4101和4102端口
  • 将发送给6100端口的数据转发给6101和6102端口

nginx_241">重启nginx服务

重启可采用关闭服务器再开启的方式,也可以直接使用以下命令:

查看报错

nginx启动不起来是可以通过 systemctl status nginx 命令查看,也可以直接查看 errorlog 文件,比如可能会看到如下内容:

2023/03/14 20:51:06 [emerg] 937503#937503: bind() to 0.0.0.0:4100 failed (98: Address already in use)
2023/03/14 20:51:06 [emerg] 937503#937503: bind() to 0.0.0.0:4100 failed (98: Address already in use)
2023/03/14 20:51:06 [emerg] 937503#937503: bind() to 0.0.0.0:4100 failed (98: Address already in use)
2023/03/14 20:51:06 [emerg] 937503#937503: bind() to 0.0.0.0:4100 failed (98: Address already in use)

一看就应该知道是端口4100被占用了。

负载均衡配置

负载均衡nginx一个常见的应用,只需要在配置文件中加入一些参数即可:

轮询

这是默认的策略,把每个请求按次序逐一分配到不同可用的server,如果分配到的server不可用,则自动分配到下一个

upstream good.cc {
    server localhost:4101;
    server localhost:4102;
}

权重

weight默认值为1,值越大则代表被访问的几率越大,下面配置中4102端口的访问几率是4101的二倍

upstream good.cc {
    server localhost:4101 weight=1;
    server localhost:4102 weight=2;
}

最少连接

顾名思义就是把请求分配到连接数最少的server

upstream good.cc {
    least_conn;
    server localhost:4101;
    server localhost:4102;
}

IP哈希

根据访问客户端ip的hash值分配,这样同一客户端的请求都会被分配到同一个server上,适合有状态的服务

upstream good.cc {
    ip_hash;
    server localhost:4101;
    server localhost:4102;
}

总结

  • nginx 在 Ununtu 20.04 上安装非常简单,使用 apt install nginx 就行啦
  • nginx 的默认主配置文件是 /etc/nginx/nginx.conf 会包含同级目录下 conf.d/*.conf 所有配置
  • nginx 服务可以用 systemctl status nginx 方式查看
  • nginx 的重启方式 systemctl restart nginxnginx -s reload
  • nginx 作为负载均衡服务器有轮询、权重、最少连接、ipHash等多种配置方式
  • 我也是刚刚入门,关于使用方法和配置文件还有很多东西要学,后面慢慢总结吧

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物,愣凑数啊~


http://www.niftyadmin.cn/n/151437.html

相关文章

信息学奥赛一本通 1383:刻录光盘(cdrom) | 洛谷 P2835 刻录光盘

【题目链接】 ybt 1383&#xff1a;刻录光盘(cdrom) 洛谷 P2835 刻录光盘 【题目考点】 1. 图论&#xff1a;强连通分量 【解题思路】 首先对该问题进行抽象&#xff0c;每个人是一个顶点&#xff0c;如果A愿意把资料拷给B&#xff0c;那么存在有向边<A, B>&#xf…

蓝桥杯刷题冲刺 | 倒计时25天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.完全二叉树1.完全二叉树 题目 链接&#xff1a; 完全二叉树的权值 - 蓝桥云课 (lanqiao.cn) 给…

《scala 编程(第3版)》学习笔记(全)

《scala 编程&#xff08;第3版&#xff09;》学习笔记 持续更新中… 第2章 入门1 函数式编程的核心一&#xff0c;函数是一等的。P9函数式编程的核心二&#xff0c;程序操作应当将输入映射成输出。不要有副作用。副作用是指改变了环境量。P10。原因&#xff1a;函数相互不…

eNSP 设备启动失败,错误代码:40 解决方案

eNSP 路由器启动失败&#xff0c;错误代码&#xff1a;40 解决方案 eNSP 设备启动失败&#xff0c;错误代码&#xff1a;40 解决方案 文章目录eNSP 路由器启动失败&#xff0c;错误代码&#xff1a;40 解决方案一、出现错误代码&#xff1a;40二、解决方法1.确定相关的软件安装…

Python基础---面试题汇总

前言 本文只涉及Python相关的面试题&#xff0c;面向中高级Python开发&#xff0c;太基本的题目不收录。 更希望通过代码演示&#xff0c;原理探究等来深入讲解某一知识点&#xff0c;做到融会贯通。 另外部分演示代码有兴趣的可以找我拿。 语言基础篇 Python的基本数据类…

uniapp怎么引入vant

uniapp引入vant后&#xff0c;只能微信小程序有效果&#xff0c;我试的H5端不报错&#xff0c;但是没效果&#xff0c;app端没有测 首先创建uniapp项目 在pages文件夹同级创建 wxcomponents 的文件夹 然后下载vant-weapp github地址&#xff1a;https://github.com/youzan/va…

6万字144道耗时72小时吐血整理【金三银四(金九银十)面试小抄之Java经典面试题基础篇总结】(附答案)

目录一.前言二.Java基础面试篇1. 什么是Java&#xff1f;2.Java 和 C的区别&#xff1f;3.Java中常用的注释以及作用&#xff1f;4.标识符的命名规则5.JVM、JRE和JDK的关系6.Oracle JDK 和 OpenJDK 的对比7.Java中基本数据类型8.int 和 Integer 有什么区别9.switch 是否能作用在…

计算机操作系统知识点总结(一文搞定!)

操作系统架层次结构&#xff1a;硬件之上&#xff0c;应用程序之下&#xff08;系统软件&#xff09; 第一章 一、操作系统的功能 系统资源的管理者——安全、高效 1. 处理机管理 2. 存储器管理 3. 文件管理 4. 设备管理 向用户提供服务 用户接口还包括GUI图形界面 对硬…