Centos9 安装 nginx 及配置

1. 安装nginx

  1. 安装依赖软件,安装之前可以看一下是否已经安装过以下软件,dnf list installed | grep zlib
bash 复制代码
dnf install gcc-c++
dnf install zlib
dnf install pcre pcre-devel
dnf install openssl openssl-devel
  1. 下载nginx,这里是下载到opt文件夹
    nginx官网下载页面
bash 复制代码
[root@centoshost opt]# wget https://nginx.org/download/nginx-1.26.3.tar.gz
  1. 解压nginx,新建一个nginx目录
bash 复制代码
[root@centoshost opt]# tar -vxf nginx-1.26.3.tar.gz 
[root@centoshost opt]# mkdir nginx
  1. 编译nginx到/opt/nginx
bash 复制代码
[root@centoshost opt]# cd nginx-1.26.3
[root@centoshost nginx-1.26.3]# ./configure --prefix=/opt/nginx
[root@centoshost nginx-1.26.3]# make
[root@centoshost nginx-1.26.3]# make install
[root@centoshost nginx-1.26.3]# cd ..
[root@centoshost opt]# cd nginx
[root@centoshost nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096  4月 20 11:29 conf
drwxr-xr-x. 2 root root   40  4月 20 11:29 html
drwxr-xr-x. 2 root root    6  4月 20 11:29 logs
drwxr-xr-x. 2 root root   19  4月 20 11:29 sbin
  1. 启动nginx
bash 复制代码
[root@centoshost nginx]# cd sbin
[root@centoshost sbin]# ll
总用量 3796
-rwxr-xr-x. 1 root root 3914936  4月 20 11:29 nginx
[root@centoshost sbin]# ./nginx
[root@centoshost sbin]# ps -aux|grep nginx
root     1861753  0.0  0.0   4344  1256 ?        Ss   11:33   0:00 nginx: master process ./nginx
nobody   1861754  0.0  0.2  13144  4840 ?        S    11:33   0:00 nginx: worker process
root     1863247  0.0  0.1   6344  1792 pts/0    R+   11:34   0:00 grep --color=auto nginx
  1. 通过浏览器访问服务器的80端口
  2. 停止nginx
bash 复制代码
[root@centoshost sbin]# ./nginx -s stop
[root@centoshost sbin]# ps -aux|grep nginx
root     1874737  0.0  0.1   6344  1920 pts/0    S+   11:38   0:00 grep --color=auto nginx
  1. 修改配置文件并刷新
bash 复制代码
[root@centoshost nginx]# pwd
/opt/nginx
[root@centoshost nginx]# ll
总用量 4
drwxr-xr-x. 2 root   root 4096  4月 20 11:29 conf
drwxr-xr-x. 2 root   root   40  4月 20 11:29 html
drwxr-xr-x. 2 root   root   41  4月 20 11:38 logs
drwxr-xr-x. 2 root   root   19  4月 20 11:29 sbin
[root@centoshost nginx]# vim ./conf/nginx.conf
[root@centoshost nginx]# ./sbin/nginx -s reload

nginx 常用命令

  • nginx 文件,后缀是temp的文件是后来自动生成的,可以删除
bash 复制代码
[root@centoshost nginx]# ll
总用量 4
drwx------. 2 nobody root    6  4月 20 11:33 client_body_temp
drwxr-xr-x. 2 root   root 4096  4月 20 11:41 conf
drwx------. 2 nobody root    6  4月 20 11:33 fastcgi_temp
drwxr-xr-x. 2 root   root   40  4月 20 11:29 html
drwxr-xr-x. 2 root   root   58  4月 20 14:26 logs
drwx------. 2 nobody root    6  4月 20 11:33 proxy_temp
drwxr-xr-x. 2 root   root   19  4月 20 11:29 sbin
drwx------. 2 nobody root    6  4月 20 11:33 scgi_temp
drwx------. 2 nobody root    6  4月 20 11:33 uwsgi_temp
  • 启动nginx
bash 复制代码
[root@centoshost nginx]# ./sbin/nginx
  • 刷新配置
bash 复制代码
[root@centoshost nginx]# ./sbin/nginx -s reload
  • 停止nginx
bash 复制代码
[root@centoshost nginx]# ./sbin/nginx -s stop
  • 查看nginx进程
bash 复制代码
[root@centoshost ~]# ps -aux|grep nginx

2. 配置nginx

超详细配置解释参考文章链接

1. 全局块

全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

  • nginx 用户和组的配置,window 下不指定,但是在 linux 里面推荐使用 root
bash 复制代码
user root;
  • 绑定 cup 的核心,默认为 1 一般配置可以 Auto [自动适配操作系统]
bash 复制代码
worker_processes auto;
  • 绑定 nginx 到某一个 cpu 的核心 把 nginx 绑定到所在机器的 1 号和 2 号 CPU 上,01代表1号,10代表2号,这里是2进制
bash 复制代码
worker_cpu_affinity 01 10
  • 添加优先级(-20-20)数字越小优先级越高
bash 复制代码
worker_priority -20
  • 错误日志的存放
bash 复制代码
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
  • 指定pid文件的存放路径
bash 复制代码
pid        logs/nginx.pid;

2. events块

配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

  • 指这一每个工作进程可以同时处理的最大连接数,理论上每台 nginx 服务器的最大连接数为 worker_processes * worker_connections
bash 复制代码
worker_connections 1024;
  • ON 时 Nginx 服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为 off,即默认为一个工作进程只能一次接受一个连接
bash 复制代码
 multi_accept on;

3. http块

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

  • 加载mime类型,类型由mime.type文件提供
bash 复制代码
include       mime.types;
  • 设置mime类型,当文件没有明确定义类型时,使用默认类型
bash 复制代码
default_type  application/octet-stream;
  • 设定日志输出格式
bash 复制代码
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
  • 日志存放位置
bash 复制代码
access_log  logs/access.log  main;
  • 为了平衡硬盘和IO的处理速度,降低系统的响应时间
bash 复制代码
sendfile        on;
  • 在sendfile为on的状态下,避免网络阻塞
bash 复制代码
tcp_nopush     on;
  • 设置服务器和客户端回话的保持时间
bash 复制代码
#keepalive_timeout  0;
keepalive_timeout  65;
  • 开启/关闭gzip压缩
bash 复制代码
gzip  on;

4. server块

每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。在使用Nginx服务器提供Web服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。

  • 多个server中,主机名与域名不能完全相同
    主机名相同,端口要不同;端口相同,主机名要不同
    如果两个server的端口和主机名都相同,下面的server将会被忽略
bash 复制代码
 # 该主机的监听端口
 listen       80;
 # 设置主机名称或者域名
 server_name  localhost;

5. localtion块

location块的主要作用是,基于Nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。

bash 复制代码
location / {
    # 设置网站根目录,可指向任何目录,例如:/home/wwwroot/
    root   html;
    # 设置默认首页,例如:index.html
    index  index.html index.htm;
}

1. location的匹配规则

符号 规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
!~ 区分大小写的不匹配正则 5
!~* 不区分大小写的不匹配正则 6
/ 通用匹配,任何请求都会匹配到 7
  1. 示例
bash 复制代码
        # 通用匹配
        location / {
            return 200 "通用匹配 location / \n";
        }
        # 正则匹配,区分大小写
        location ~ /hello {
            return 200 "正则匹配,区分大小写 location ~ /hello/ \n";
        }
        # 正则匹配,不区分大小写
        location ~* /hello {
            return 200 "正则匹配,不区分大小写 location ~* /hello \n";
        }
        # 以...开头的匹配
        location ^~ /hello {
            return 200 "以...开头的匹配 location ^~ /hello \n";
        }
        # 精确匹配
        location = /hello {
            return 200 "精确匹配 location = /hello \n";
        }
bash 复制代码
# /hello
精确匹配 location = /hello 
# /nginx/hello
正则匹配,区分大小写 location ~ /hello/ 
# /hellonginx
以...开头的匹配 location ^~ /hello 
# /hEllo
正则匹配,不区分大小写 location ~* /hello 
# /hello/world
以...开头的匹配 location ^~ /hello 
# /world
通用匹配 location / 

2. 获取路径参数

bash 复制代码
location /error {
    error_page 418 = @error418;
    error_page 419 = @error419;
    
    if ($args ~ "418"){return 418;}
    if ($args ~ "419"){return 419;}


}
location @error418 {
    return 200 "418 \n";
}
location @error419 {
    return 200 "419 \n";
}
bash 复制代码
[root@centoshost nginx]# curl localhost/error?418
418 
  1. 获取完整的请求参数
bash 复制代码
location /test {
    return 200 "请求参数为:$args";
}

当访问 http://yourserver.com/test?name=John\&age=30 时,Nginx 会返回 请求参数为:name=John&age=30。

  1. 使用 $arg_参数名 获取指定参数的值
bash 复制代码
location /test {
    if ($arg_name) {
        return 200 "您的名字是:$arg_name";
    } else {
        return 400 "未提供名字参数";
    }
}

当访问 http://yourserver.com/test?name=Alice 时,Nginx 会返回 您的名字是:Alice;如果访问 http://yourserver.com/test,则会返回 未提供名字参数。

  1. 使用正则表达式匹配路径中的参数
bash 复制代码
location ~ ^/user/(\w+)$ {
    set $username $1;
    return 200 "欢迎,$username!";
}

~ ^/user/(\w+) 是一个正则表达式,它匹配以 /user/ 开头,后面跟着一个或多个单词字符的路径。(\\w+) 是一个捕获组,捕获到的内容会赋值给 1 变量,这里通过 set username 1; 将其赋值给自定义变量 $username。当访问 http://yourserver.com/user/Bob 时,Nginx 会返回 欢迎,Bob!

3. 重定向

浏览器访问a.html

bash 复制代码
location /a.html {
    return 301 https://www.baidu.com; # 重定向到百度
}

4. 反向代理

浏览器访问a.html

bash 复制代码
location /a.html {
    proxy_pass http://www.baidu.com; # 如果是https需要ssl证书
}
  • 使用全局变量设置请求头
bash 复制代码
location /a.html {
    porxy_set_header X_Real_IP $remote_addr;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Server $server_name;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Url $scheme://$http_host$request_uri;
    proxy_pass http://www.baidu.com; # 如果是https需要ssl证书
}

5. 开启目录浏览

  • /menu/download/URI要与目录路径相匹配
bash 复制代码
location /menu/download/  {

    autoindex on;   # 开启目录浏览
    autoindex_exact_size off;   # 关闭计算目录文件大小
    autoindex_localtime on;   # 显示本地时间格式
}
  • 真实路径

  • 效果

6. 全局变量

分类 变量名 说明
与服务器相关 $server_name 当前请求的服务器名称,根据请求的域名确定
与服务器相关 $server_port 服务器监听的端口号
与服务器相关 $document_root 当前请求的文档根目录,通常在 server 块中通过 root 指令设置
与客户端请求相关 $remote_addr 客户端的 IP 地址
与客户端请求相关 $remote_port 客户端的端口号
与客户端请求相关 $http_user_agent 客户端发送请求时附带的 User - Agent 字段的值,包含浏览器类型、版本、操作系统等信息
与客户端请求相关 $http_cookie 客户端发送的 Cookie 信息
与客户端请求相关 $request_method 客户端的请求方法,如 GETPOSTPUTDELETE
与客户端请求相关 $request_uri 客户端请求的完整 URI,包括查询字符串。例如,对于请求 http://example.com/index.html?param=value$request_uri 的值为 /index.html?param=value
与客户端请求相关 $uri 客户端请求的 URI,不包含查询字符串。对于上述例子,$uri 的值为 /index.html
与请求处理相关 $args 请求中的查询字符串。例如,对于请求 http://example.com/index.html?param=value$args 的值为 param=value
与请求处理相关 $scheme 请求使用的协议,通常是 httphttps
与请求处理相关 $server_protocol 服务器使用的协议版本,如 HTTP/1.1HTTP/2
与时间相关 $time_iso8601 当前时间的 ISO 8601 格式表示,例如 2025-04-21T12:00:00+08:00
与时间相关 $time_local 当前时间的本地格式表示,例如 21/Apr/2025:12:00:00 +0800

6. 负载均衡

假设有3个服务器同时给我们提供服务,3个服务器的地址分别是:

bash 复制代码
localhost:8001;
localhost:8002;
localhost:8003;
  1. 配置nginx反向代理
bash 复制代码
http {
	# ... 其他配置
    # 配置服务组,名字是group
    upstream group{
        server localhost:8001;
        server localhost:8002;
        server localhost:8003;
    }
    server {
    listen       80;
    server_name  localhost;
    charset utf-8;
    # 配置反向代理,指向服务组
    location / {
        proxy_pass http://group;
    }
}
  • 效果:会在3个服务之间轮着使用
  1. ip_hash
bash 复制代码
    # 配置服务组
    upstream group{
        server localhost:8001;
        server localhost:8002;
        server localhost:8003;
        ip_hash;
    }

效果:用户固定访问一个服务器

ip_hash:Nginx 会根据客户端的 IP 地址进行哈希计算,然后将请求固定地转发到某个上游服务器。这样可以确保来自同一个客户端的请求始终被转发到同一台服务器,对于一些需要保持会话状态的应用(如用户登录后需要在同一台服务器上处理后续请求)非常有用。

  1. 配置权重
bash 复制代码
    # 配置服务组
    upstream group{
        server localhost:8001 weight=1;
        server localhost:8002 weight=1;
        server localhost:8003 weight=2;
        # ip_hash;
    }
  • 效果:服务器的使用会按照权重的比例出现
  1. 配置最大失败次数和不可用时间
bash 复制代码
    # 配置服务组
    upstream group{
        server localhost:8001 weight=1 max_fails=2 fail_timeout=30s;
        server localhost:8002 weight=1 max_fails=2 fail_timeout=30s;
        server localhost:8003 weight=2 max_fails=2 fail_timeout=30s;
        # ip_hash;
    }
  • fail_timeout:定义了服务器失败后的不可用时间
  • max_fails:最大失败次数
  • 表示在 fail_timeout 时间段内,允许该服务器失败(例如返回错误状态码等情况)的最大失败次数是max_fails。如果在 fail_timeout 内失败次数达到 max_fails 次,Nginx 将认为该服务器暂时不可用,在 fail_timeout 时间段内不会再将请求转发到该服务器。
相关推荐
李菠菜5 小时前
优化Centos关闭SELinux/Swap及资源限制调整
linux·后端·centos
李菠菜6 小时前
CentOS7更改默认SSH端口与配置指南
linux·centos·ssh
比钻石还闪亮的nan人7 小时前
CENTOS 7 安装VNC
linux·运维·centos
城南已开9798 小时前
vue部署到nginx服务器 启用gzip
服务器·vue.js·nginx
十夫长11 小时前
centos与ubuntu系统版本介绍
linux·ubuntu·centos
꧁༺朝花夕逝༻꧂12 小时前
随机面试--<二>
linux·运维·数据库·nginx·面试
若疆赤云online12 小时前
Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
运维·nginx
happlay7113 小时前
在校园网环境下被“劫持”了 HTTP 请求
前端·nginx
村头的猫Cat14 小时前
Nginx Upstream了解一下
nginx