当前位置: 首页 > backend >正文

高可用实战之Nginx + Apache篇

高可用实战之Nginx + Apache篇

目录

高可用实战之Nginx + Apache篇

一 . 准备4台服务器

二. 安装Nginx使用ngx_http_upstream_module 模块

1.  下载 Nginx 源代码

2.  解压源码包

3. 安装依赖

4. 配置编译选项

5.  编译和安装 Nginx

6. 验证启用的模块

7.安装完成,启动

查看端口是否开启

查看nginx 进程:

查看防火墙状态:

开放指定端口(例如 80)

修改配置后重新加载配置重启

Nginx停止

三.  另外 183,184 两台分配 安装 Apache HTTP Server (httpd)

1. 安装httpd

2. 启动httpd

3. 查看httpd的状态

4. 默认端口是80端口,把端口分别换成18091,18092

5. 检查配置文件是否有效

6. 将ServerName 127.0.0.1 添加到文件的第101行

7. 检查端口是否被占用

8. 查看httpd的错误日志

9. 检查和设置日志目录权限

10.  分别开放指定端口(例如18091|18092)

四. 通过配置Nginx来实现支持负载均衡和故障转移

1. Nginx  之负载均衡

2. 验证配置文件是否有问题

3. 加载配置并重启

4. 此时此刻完成了完整的负载均衡

5. 把权重一个调整成2,一个调整成5

6. Nginx 之故障转移

7. Nginx 之动静分离

1.上传一张图片到183服务器的静态目录下,并界面验证访问,静态资源请求正常。

2. 在184 上面新建目录,模拟后端请求json

3. 配置nginx 动静分离

4. 根据扩展名实现服务器的动静分离

8. Nginx 之针对不同手机类型进行代理

9. Nginx  之针对不同浏览器进行代理

1.开启nginx 访问日志,并查询用户使用的浏览器类型

2.  配置nginx 根据浏览器访问不通的服务器站点

10.  Nginx 负载均衡内核参数优化

1. net.ipv4.tcp_fin_timeout = 2

2. net.ipv4.tcp_tw_reuse = 1

3. net.ipv4.tcp_tw_recycle = 1

4. net.ipv4.tcp_syncookies = 1

5. net.ipv4.tcp_keepalive_time = 600

6. net.ipv4.ip_local_port_range = 4000 65535

7. net.ipv4.tcp_max_syn_backlog = 16384

8. net.ipv4.tcp_max_tw_buckets = 36000

9. net.ipv4.route.gc_timeout = 100

10. net.ipv4.tcp_syn_retries = 1

11. net.core.somaxconn = 16384

12. net.core.netdev_max_backlog = 16384

13. net.ipv4.tcp_max_orphans = 16384

14.  net.ipvip_conntrack_max = 25000000

15. net.ipv4.netfilter.ip_conntrack_max = 25000000

16. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

17. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

18. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

19. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

总结配置:

Nginx 模块及参数的详细解释


一 . 准备4台服务器

hostnamectl set-hostname Nginx01

hostnamectl set-hostname Nginx02

hostnamectl set-hostname Apache01
hostnamectl set-hostname Apache02

服务器IP

系统

主要组件

192.168.100.181

Rocky Linux 10.0 (Red Quartz)

nginx

192.168.100.182

Rocky Linux 10.0 (Red Quartz)

nginx

192.168.100.183

Rocky Linux 10.0 (Red Quartz)

httpd

192.168.100.184

Rocky Linux 10.0 (Red Quartz)

httpd

二. 安装Nginx使用ngx_http_upstream_module 模块

ngx_http_upstream_module:配置后端服务器组,支持负载均衡和故障转移。

Nginx 官网下载最新版本的安装包,不使用服务器yum安装,可能不是最新的,这样安装对扫漏又来进行打补丁解更方便。上传Nginx安装包至服务器,解压并进入目录执行安装。确保安装过程中包含ngx_http_upstream_module模块。编译安装时通过--add-module参数指定模块路径,若模块已内置则无需额外添加。安装完成后,修改Nginx配置文件nginx.conf,在http块中使用upstream指令定义后端服务器组,设置负载均衡算法如轮询、加权轮询或IP哈希等,同时配置server块中的proxy_pass指向定义的upstream名称,完成基础负载均衡配置。

Nginx 官网地址:nginx

ngx_http_upstream_module:模块地址 Module ngx_http_upstream_module

截止2025八月Nginx 版本1.29

下载Nginx1.29.0的地址:https://nginx.org/download/nginx-1.29.0.tar.gz

yum -y install wget vim tar net-tools

1.  下载 Nginx 源代码

wget https://nginx.org/download/nginx-1.29.0.tar.gz

2.  解压源码包

tar -zxvf nginx-1.29.0.tar.gz

cd nginx-1.29.0

3. 安装依赖

当前系统属于红帽系列

yum groupinstall "Development Tools"

yum install pcre-devel zlib-devel openssl-devel

4. 配置编译选项

ngx_http_upstream_module 是 Nginx 默认启用的模块,养成习惯安装指定启动模块。

常规安装包含的模块

./configure --prefix=/usr/local/nginx \

            --with-http_ssl_module \

            --with-http_upstream_module

--prefix=/usr/local/nginx:指定 Nginx 的安装路径。

--with-http_ssl_module:启用 SSL 支持,用于 HTTPS。

--with-http_upstream_module:启用上游模块,用于设置负载均衡和反向代理

备注:默认是不要显式地启用 --with-http_upstream_module,因为它已经是默认启用的模块

编译执行

./configure --prefix=/usr/local/nginx --with-http_ssl_module

这个错显示编译的时候缺少pcre库。

本次统一都是用二进制包安装;

pcre库官网地址:https://www.pcre.org/

下载地址:https://psychz.dl.sourceforge.net/project/pcre/pcre2/10.37/pcre2-10.37.tar.gz?viasf=1

tar -xzvf pcre2-10.37.tar.gz

使用 --with-pcre=<path> 指定 PCRE 库的路径编译通过

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=/home/pcre2-10.37


 

5.  编译和安装 Nginx

配置完后,继续使用 make 和 make install 来编译并安装 Nginx:

make && make install

6. 验证启用的模块

完成编译和安装后,你可以通过以下命令查看已启用的模块:

/usr/local/nginx/sbin/nginx -V

7.安装完成,启动

/usr/local/nginx/sbin/nginx

查看端口是否开启

ss -tuln | grep :80

  1. 查看nginx 进程:

ps aux | grep nginx

查看防火墙状态:

firewall-cmd --state

开放指定端口(例如 80)

sudo firewall-cmd --permanent --add-port=80/tcp

sudo firewall-cmd --reload

修改配置后重新加载配置重启

 /usr/local/nginx/sbin/nginx -s reload

Nginx停止

/usr/local/nginx/sbin/nginx -s stop

三.  另外 183,184 两台分配 安装 Apache HTTP Server (httpd)

1. 安装httpd

yum install httpd -y

2. 启动httpd

systemctl start httpd

3. 查看httpd的状态

systemctl status httpd

4. 默认端口是80端口,把端口分别换成18091,18092

192.168.100.183    端口     18091

sed -i 's/^Listen 80$/Listen 18091/' /etc/httpd/conf/httpd.conf

192.168.100.184    端口     18092

sed -i 's/^Listen 80$/Listen 18092/' /etc/httpd/conf/httpd.conf

5. 检查配置文件是否有效

apachectl configtest

6. 将ServerName 127.0.0.1 添加到文件的第101

sed -i '101i ServerName 127.0.0.1' /etc/httpd/conf/httpd.conf

7. 检查端口是否被占用

netstat -tuln | grep -E '18091|18092'

8. 查看httpd的错误日志

tail -f /var/log/httpd/error_log

9. 检查和设置日志目录权限

确保 Apache 有权访问日志目录。检查日志目录的权限,例如:

ls -ld /var/log/httpd/

确保 Apache 用户对日志目录具有写权限。如果没有权限,可以使用以下命令修复权限:

chown -R apache:apache /var/log/httpd/

chmod -R 755 /var/log/httpd/

解决方法: 如果您怀疑 SELinux 是问题的根源,可以临时禁用 SELinux,看看是否可以启动 Apache:

setenforce 0

10.  分别开放指定端口(例如18091|18092

192.168.100.183    端口     18091

firewall-cmd --permanent --add-port=18091/tcp

firewall-cmd --reload

192.168.100.184    端口     18092

firewall-cmd --permanent --add-port=18092/tcp

firewall-cmd --reload

11. 自定义网站存放路径

mkdir -p /home/www/mywebsite/

设置权限

chown -R apache:apache /home/www/mywebsite/

chmod -R 755 /home/www/mywebsite

sed -i 's|DocumentRoot "/var/www/html"|DocumentRoot "/home/www/mywebsite"|' /etc/httpd/conf/httpd.conf

sudo sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/c\<Directory "/home/www/mywebsite">\n    Options Indexes FollowSymLinks\n    AllowOverride All\n    Require all granted\n</Directory>' /etc/httpd/conf/httpd.conf

12. 在183,184机器上自己的目录站点上分别添加index.html

[root@Apache02 mywebsite]# ll -ld ../mywebsite/

drwxr-xr-x. 2 apache apache 6 Aug 12 19:44 ../mywebsite/

[root@Apache02 mywebsite]# vim index.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Apache2 Site</title>

</head>

<body>

    <h1>这是 Apache02 站点!</h1>

    <p>IP地址:192.168.100.184</p>

<p>端口:18092</p>

 <p>01和02站点内容一样</p>

</body>

</html>

[root@Apache01 mywebsite]# pwd

/home/www/mywebsite

[root@Apache01 mywebsite]# vim index.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Apache2 Site</title>

</head>

<body>

    <h1>这是 Apache01 站点!</h1>

    <p>IP地址:192.168.100.183</p>

    <p>端口:18091</p>

    <p>01和02站点内容一样</p>

</body>

四. 通过配置Nginx来实现支持负载均衡和故障转移

1. Nginx  之负载均衡

官网参考:Module ngx_http_upstream_module

cd /usr/local/nginx/conf

cp nginx.conf nginx.conf_back

使用 sed 删除注释行让看起更加清爽:

sed -i '/^\s*#/d' /usr/local/nginx/conf/nginx.conf

vim nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream lb_webserver {

         server 192.168.100.183:18091       weight=5;

         server 192.168.100.184:18092       weight=5;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            proxy_pass http://lb_webserver;

        }

     }

}

2. 验证配置文件是否有问题

[root@Nginx01 conf]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

3. 加载配置并重启

[root@Nginx01 conf]# /usr/local/nginx/sbin/nginx -s reload

[root@Nginx01 conf]#

4. 此时此刻完成了完整的负载均衡

weight:表示服务器的权重,权重值越高,Nginx 将分配给该服务器的请求就越多。在配置负载均衡时,如果没有指定 weight,则默认所有服务器的权重为 1。 都为5的时候,你一次我一次的轮询负责。根据生产实际的情况,权重大小调整越小轮询的值越小,意味着轮询的次数越少,权重值越大,轮询的次数越多。

示例:

echo "这是 Apache01 站点!IP地址:192.168.100.183; 端口:18091; 01和02站点内容一样" > /home/www/mywebsite/index.html

echo "这是 Apache02 站点!IP地址:192.168.100.184; 端口:18092; 01和02站点内容一样" > /home/www/mywebsite/index.html

5. 把权重一个调整成2,一个调整成5

 server 192.168.100.183:18091       weight=2;

 server 192.168.100.184:18092       weight=5;

6. Nginx 之故障转移

轮询节点可以是多台,备份节点也可以是多台。官网例子:

server 192.168.100.183:18091   weight=5;  #轮询节点

server 192.168.100.184:18092   backup; #轮询节点全部故障后跳转到备份节点

让183服务停止,验证是否可以跳转到备份节点:

7. Nginx 之动静分离

动静分离(Static and Dynamic Separation)是指将静态资源(如图片、CSS、JavaScript文件等)和动态请求(如PHP、Python、Java等后端处理请求)分别由不同的服务器或不同的路径进行处理。Nginx作为反向代理服务器,可以帮助我们高效地实现这一分离。

静态资源:是指不需要服务器处理的文件,通常是图片、CSS、JavaScript、字体文件等。这些文件通常可以直接从磁盘读取,响应速度较快。

动态请求:是指需要服务器进行处理并生成动态内容的请求,通常包括数据查询、页面生成等操作。比如,PHP、Java、Node.js等后台语言处理的请求。

性能优化:

  • 静态资源通常无需经过应用服务器的处理,可以直接由 Nginx 提供,减少了应用服务器的负担。
  • 静态资源文件通常较大且请求频繁,直接通过 Nginx 提供可以大大提高响应速度。

        #静态缓存30天 

        expires 30d;  

1.上传一张图片到183服务器的静态目录下,并界面验证访问,静态资源请求正常。

http://192.168.100.183:18091/static/01.jpg

2. 在184 上面新建目录,模拟后端请求json

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>动态请求文件内容</title>

</head>

<body>

    <h1>文件内容展示</h1>

    <div id="content">正在加载...</div>

    <script>

        fetch('dynamic/file.json').then(response => response.json())  // 解析 JSON 格式的响应

           .then(data => {

                 // 处理并展示 JSON 数据

                 console.log(data);

                 document.getElementById('content').innerText = JSON.stringify(data, null, 2);

           })

        .catch(error => {

            document.getElementById('content').innerText = '错误: ' + error.message;

        });

    </script>

</body>

{

  "name": "张三",

  "age": 30,

  "phoneNumbers": [

    {

      "type": "home",

      "number": "028-11111111"

    },

    {

      "type": "mobile",

      "number": "15908113332"

    }

  ],

  "isActive": true

}

3. 配置nginx 动静分离

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    #静态请求的服务器组

    upstream lb_static {

         server 192.168.100.183:18091   weight=5;

    }

    #动态请求的服务器组

    upstream lb_dynamic {

         zone upstream_dynamic 64k;

         server 192.168.100.184:18092  weight=5;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            proxy_pass http://lb_dynamic;

        }

        location /static/ {

            proxy_pass http://lb_static;

            expires 30d;

        }

     }

}

备注: 同一个域名,动态请求走的动态服务器组,静态文件走的是静态文件组

4. 根据扩展名实现服务器的动静分离

# 静态资源的配置 

location ~* \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {

              proxy_pass http://static_pools;

               include proxy.conf;

}

# 动态资源的配置

location ~* \.(php|php3|php5)$ {

             proxy_pass http://dynamic_pools;

              include proxy.conf;

}

vim proxy.conf

# 关闭代理重定向 :Nginx 将不会修改它并将其直接转发给客户端。通常,如果你不希望修改响应中的重定向地址,这个配置是有用的。

proxy_redirect off;

# 设置代理头部信息 :这是为了保持客户端请求头中的主机信息,特别是在后端服务需要通过该信息来处理请求时

proxy_set_header Host $host:$proxy_port;

#设置 X-Forwarded-For 头部,传递客户端的原始 IP 地址。$remote_addr 是 Nginx 自动提供的变量,表示客户端的 IP 地址

proxy_set_header X-Forwarded-For $remote_addr;

# 设置代理连接超时和代理请求读取超时

proxy_connect_timeout 90s;

proxy_send_timeout 90s;

proxy_read_timeout 90s;

# 设置代理缓冲区和大小

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

8. Nginx 之针对不同手机类型进行代理

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    #静态请求的服务器组

    upstream lb_static_pools {

         server 192.168.100.183:18091   weight=5;

    }

    #动态请求的服务器组

    upstream lb_dynamic_pools {

         zone upstream_dynamic 64k;

         server 192.168.100.184:18092  weight=5;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            if ($http_user_agent ~* "android") {

               proxy_pass http://lb_dynamic_pools;

               break;

            }

            if ($http_user_agent ~* "iphone") {

                proxy_pass http://lb_dynamic_pools;

                break;

            }

            # 默认代理

            proxy_pass http://lb_dynamic_pools;

        }

        location /static/ {

            proxy_pass http://lb_static_pools;

            expires 30d;

        }

     }

}

9. Nginx  之针对不同浏览器进行代理

1.开启nginx 访问日志,并查询用户使用的浏览器类型

       log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                       '"$http_user_agent" "$http_x_forwarded_for"';

      access_log  logs/access.log  main;

     查看访问日志: tail -f /usr/local/nginx/logs/access.log

      

2.  配置nginx 根据浏览器访问不通的服务器站点

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                       '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    # 其他配置...

    sendfile        on;

    keepalive_timeout  65;

    map $http_user_agent $browser_type {

        default "other";      # 默认值为 "other"

        ~*Chrome "chrome";    # 如果 User-Agent 包含 "Chrome"

        ~*Firefox "firefox";  # 如果 User-Agent 包含 "Firefox"

        ~*Safari "safari";    # 如果 User-Agent 包含 "Safari"

     ~*MSIE "ie";           # 如果 User-Agent 包含 "MSIE"(IE 10 及以下)

     ~*Trident "ie";        # 如果 User-Agent 包含 "Trident"(IE 11)

    }

    #静态请求的服务器组

    upstream lb_static_pools {

     server 192.168.100.183:18091   weight=5;

    }

    #动态请求的服务器组

    upstream lb_dynamic_pools {

 zone upstream_dynamic 64k;

         server 192.168.100.184:18092  weight=5;

    }

    upstream chrome_pools {

         server 192.168.100.183:18091  weight=5;

    }

    upstream firefox_pools {

         server 192.168.100.184:18092  weight=5;

    }

    upstream safari_pools {

         server 192.168.100.183:18091  weight=5;

    }

    upstream ie_pools {

       server 192.168.100.184:18092  weight=5;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            if ($browser_type = "chrome") {

                proxy_pass http://chrome_pools;

          break;

            }

            if ($browser_type = "firefox") {

                proxy_pass http://firefox_pools;

          break;

            }

            if ($browser_type = "ie") {

                proxy_pass http://ie_pools;

          break;

            }

            # 默认代理

            proxy_pass http://lb_dynamic_pools;

        }

     location /static/ {

            proxy_pass http://lb_static_pools;

           expires 30d;

     }

     }

}

10.  Nginx 负载均衡内核参数优化

1. net.ipv4.tcp_fin_timeout = 2

  • 描述:该参数指定了 TCP 连接处于 FIN_WAIT 状态时的最大等待时间。FIN_WAIT 状态发生在连接关闭时,通常是因为对端发送了一个 FIN 包表示连接关闭。Nginx 作为 Web 服务器,处理大量的并发连接时,可以通过减少 FIN_WAIT 状态的超时时间来减少占用的系统资源。
  • 建议值2 秒(较小的超时时间可以释放资源)。

sysctl -w net.ipv4.tcp_fin_timeout=2

2. net.ipv4.tcp_tw_reuse = 1

  • 描述:当 TCP 连接处于 TIME_WAIT 状态时,可以重新使用该端口进行新的连接。TIME_WAIT 状态发生在连接关闭后,通常会持续 2 到 4 分钟。启用此选项可以帮助提高系统的资源使用率,尤其是在高并发场景下。
  • 建议值1 表示启用,允许重用 TIME_WAIT 状态的连接。

     sysctl -w net.ipv4.tcp_tw_reuse=1

3. net.ipv4.tcp_tw_recycle = 1

  • 描述:启用 TCP 时间戳的快速回收(TIME_WAIT)状态的连接。该选项有助于快速清理旧的 TIME_WAIT 连接。请注意,这个选项可能会导致 NAT(网络地址转换)环境下的某些问题,因此不推荐在有 NAT 的网络环境下使用。
  • 建议值1 启用,但要谨慎使用,特别是在有 NAT 或代理的网络环境中。

sysctl -w net.ipv4.tcp_tw_recycle=1

4. net.ipv4.tcp_syncookies = 1

  • 描述:启用 TCP 同步 cookies。此配置可以在 TCP 握手中防止 SYN 洪水攻击。它使用 cookies 来验证连接请求,确保请求是合法的,而不是攻击者伪造的。
  • 建议值1 表示启用。

sysctl -w net.ipv4.tcp_syncookies=1

5. net.ipv4.tcp_keepalive_time = 600

  • 描述:此选项控制 TCP 保活包发送的时间间隔(以秒为单位)。如果设置为 600,则在 600 秒(10 分钟)后开始发送保活包,以确认连接是否仍然有效。
  • 建议值600 秒对于很多服务器来说是一个合理的值,可以避免频繁的保活包。

sysctl -w net.ipv4.tcp_keepalive_time=600

6. net.ipv4.ip_local_port_range = 4000 65535

  • 描述:此选项设置本地端口的使用范围。默认情况下,系统的本地端口范围是 32768-61000,设置此项可以扩大可用端口的范围,从而提高服务器在高并发情况下的并发连接能力。
  • 建议值4000 65535,意味着本地端口的范围从 4000 到 65535

sysctl -w net.ipv4.ip_local_port_range="4000 65535"

7. net.ipv4.tcp_max_syn_backlog = 16384

  • 描述:此选项指定服务器可以为 SYN 请求排队的最大数量。增大这个值可以增加在高并发情况下处理 TCP 三次握手请求的能力,特别是在 SYN 洪水攻击时,提供更多的缓冲区。
  • 建议值16384,这是一个合理的值,能有效提升高并发时的连接请求处理能力。

sysctl -w net.ipv4.tcp_max_syn_backlog=16384

8. net.ipv4.tcp_max_tw_buckets = 36000

  • 描述:指定在 TIME_WAIT 状态下允许的最大连接数。如果系统的 TIME_WAIT 连接数超出该阈值,新的连接请求将被丢弃。增大该值可以减少系统因 TIME_WAIT 状态而丢弃连接的概率。
  • 建议值36000,这是一个较为宽松的值,能容忍更多的 TIME_WAIT 状态。

sysctl -w net.ipv4.tcp_max_tw_buckets=36000

9. net.ipv4.route.gc_timeout = 100

  • 描述:此选项控制路由垃圾回收超时时间(以秒为单位)。当路由条目不再被使用时,系统会清除这些条目。减少该值可以提高路由表更新的频率,适应动态变化的路由环境。
  • 建议值100 秒。

sysctl -w net.ipv4.route.gc_timeout=100

10. net.ipv4.tcp_syn_retries = 1

  • 描述:此选项控制系统在 TCP 连接尝试时的最大 SYN 重试次数。通常,系统会在握手失败时重新尝试连接。设置为 1 表示仅尝试一次,减少网络延迟。
  • 建议值1,即仅重试一次。

sysctl -w net.ipv4.tcp_syn_retries=1

11. net.core.somaxconn = 16384

  • 解释: 这个参数控制系统对每个监听端口的最大排队连接数。它影响到listen()系统调用中backlog的最大值。默认情况下,somaxconn的值比较小,可能会导致大量的连接请求被丢弃。增加这个值可以帮助系统在高并发情况下更好地处理请求。
  • 适用场景: 需要处理大量并发TCP连接的场景,比如Web服务器。

12. net.core.netdev_max_backlog = 16384

  • 解释: 这个参数控制网络接口(如网卡)接收队列的最大长度。它影响到网络接口接收数据包时的排队能力。增加此参数的值可以帮助缓解网络接口因处理过多数据包而导致的丢包问题。
  • 适用场景: 高负载网络环境,特别是在大规模的数据传输时。

13. net.ipv4.tcp_max_orphans = 16384

  • 解释: 这个参数控制在系统中存在的最大未连接的TCP socket数量。一个未连接的socket指的是客户端或服务端在进行TCP连接时,在连接过程中未正式完成的socket。此参数可以避免系统中因过多的挂起连接而导致资源耗尽。
  • 适用场景: 高并发应用,尤其是在有大量半连接或者连接尚未完全建立的环境下。

14.  net.ipvip_conntrack_max = 25000000

  • 解释: 这个参数控制Linux内核在防火墙或NAT(网络地址转换)操作中,允许跟踪的最大连接数。防火墙和NAT会维护每个TCP连接的状态信息,设置较高的conntrack_max值,可以提高系统处理大量网络连接的能力。
  • 适用场景: 高并发网络连接环境,尤其是涉及大量并发连接的应用,如P2P或大规模Web应用。

15. net.ipv4.netfilter.ip_conntrack_max = 25000000

  • 解释: 这个参数与ip_conntrack_max类似,但是它针对的是网络过滤(Netfilter)模块使用的连接追踪表大小。Netfilter是Linux内核的防火墙框架,用于包过滤、NAT等。提高这个参数可以增加防火墙所能追踪的连接数量,适用于防火墙负载较大的环境。
  • 适用场景: 高流量防火墙设置或者NAT负载较重的网络环境。

16. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

  • 解释: 这个参数设置TCP连接在“已建立”状态下的连接追踪超时时间(单位为秒)。如果一个连接的活动时间超过了该值,它将被从连接追踪表中删除。默认值通常较短,增加这个值有助于保持长期的TCP连接,如Web服务器与客户端的长连接。
  • 适用场景: 长时间保持TCP连接的应用,如WebSocket、数据库连接池等。

17. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

  • 解释: 这个参数控制TCP连接在“TIME_WAIT”状态下的连接超时时间。TIME_WAIT是TCP协议中的一个状态,表示连接已经关闭,但仍然等待足够的时间来确保所有数据包都正确传输。延长TIME_WAIT的超时时间有助于减少系统中TIME_WAIT状态的连接。
  • 适用场景: 防止大量的TIME_WAIT连接占用系统资源,特别是在高负载的服务器上。

18. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

  • 解释: 这个参数设置TCP连接在“CLOSE_WAIT”状态下的超时时间。CLOSE_WAIT状态表示连接的关闭请求已经收到,但对端还没有关闭连接。调整该参数可以帮助及时回收连接资源。
  • 适用场景: 处理频繁的TCP连接关闭操作的系统。

19. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

  • 解释: 这个参数控制TCP连接在“FIN_WAIT”状态下的连接超时时间。FIN_WAIT状态表示连接的一方已经发送了关闭请求(FIN包),但另一方尚未回应。调整该参数可以影响系统如何处理未完成关闭的连接。


总结配置:

sysctl -w net.ipv4.tcp_fin_timeout=2

sysctl -w net.ipv4.tcp_tw_reuse=1

sysctl -w net.ipv4.tcp_tw_recycle=1

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_keepalive_time=600

sysctl -w net.ipv4.ip_local_port_range="4000 65535"

sysctl -w net.ipv4.tcp_max_syn_backlog=16384

sysctl -w net.ipv4.tcp_max_tw_buckets=36000

sysctl -w net.ipv4.route.gc_timeout=100

sysctl -w net.ipv4.tcp_syn_retries=1

net.core.somaxconn = 16384

net.ipv4.tcp_max_orphans = 16384

Nginx 模块及参数的详细解释

模块名称

说明

示例

ngx_http_core_module

Nginx 核心模块,提供基本的 HTTP 功能和配置支持。

worker_processes 4; 用于配置 Nginx 使用的工作进程数。

ngx_http_access_module

控制访问权限的模块,通过 IP 地址或其他条件来控制访问权限。

deny 192.168.1.1; 阻止指定 IP 地址的访问。

ngx_http_addition_module

允许在响应中附加内容,用于动态地修改 HTTP 响应。

add_header X-Frame-Options SAMEORIGIN; 在响应中添加 X-Frame-Options 头部。

ngx_http_api_module

提供 API 功能的模块。

location /api { api; } 配置 API 路由。

ngx_http_auth_basic_module

支持基本认证的模块,通过用户名和密码保护资源。

auth_basic "Restricted"; 启用基本认证,要求输入用户名和密码。

ngx_http_auth_jwt_module

支持通过 JWT (JSON Web Token) 实现认证的模块。

auth_jwt "secret"; 使用 JWT 进行认证。

ngx_http_auth_request_module

支持通过外部请求进行认证的模块。

auth_request /auth; 将认证请求转发给 /auth 路径。

ngx_http_autoindex_module

生成目录列表的模块,当目录没有 index.html 等文件时,会列出目录内容。

autoindex on; 打开目录自动索引功能。

ngx_http_browser_module

根据浏览器的 User-Agent 提供不同的响应内容。

if ($http_user_agent ~ "MSIE") { add_header X-Content-Type-Options nosniff; }

ngx_http_charset_module

设置响应字符集的模块。

charset UTF-8; 设置响应字符集为 UTF-8。

ngx_http_dav_module

用于支持 WebDAV 协议的模块,允许上传、下载和管理文件。

dav_methods PUT DELETE MKCOL COPY MOVE; 配置 WebDAV 支持的 HTTP 方法。

ngx_http_empty_gif_module

返回一个 1x1 像素的空白 GIF 图像的模块,常用于占位或防止爬虫访问。

location /empty.gif { empty_gif; } 返回一个空白 GIF 图像。

ngx_http_f4f_module

支持 F4F (FastCGI to FastCGI) 功能的模块。

fastcgi_pass unix:/tmp/php-fpm.sock; 配置 FastCGI 后端服务器。

ngx_http_fastcgi_module

支持 FastCGI 协议的模块,用于连接 PHP、Perl 等动态语言的应用。

fastcgi_pass 127.0.0.1:9000; 配置 FastCGI 服务器地址。

ngx_http_flv_module

提供对 FLV 视频格式的支持,允许流式传输 FLV 视频文件。

location /video/ { flv; } 启用 FLV 文件的支持。

ngx_http_geo_module

根据客户端 IP 地址来设置变量,例如实现地理位置的限制。

geo $country { default CN; 192.168.1.0/24 US; } 根据 IP 地址设置国家变量。

ngx_http_geoip_module

基于 GeoIP 数据库进行地理位置识别的模块。

geoip_country /usr/share/GeoIP/GeoIP.dat; 根据 IP 地址识别国家。

ngx_http_grpc_module

支持 gRPC 协议的模块。

grpc_pass grpc://localhost:50051; 配置 gRPC 服务器地址。

ngx_http_gunzip_module

支持解压 GZIP 压缩内容的模块。

gunzip on; 启用 GZIP 解压缩功能。

ngx_http_gzip_module

支持压缩 HTTP 响应内容为 GZIP 格式的模块。

gzip on; 启用 GZIP 压缩。

ngx_http_gzip_static_module

支持为静态文件启用 GZIP 压缩的模块。

gzip_static on; 为静态文件启用 GZIP 压缩。

ngx_http_headers_module

设置 HTTP 响应头的模块。

add_header X-Content-Type-Options nosniff; 设置响应头。

ngx_http_hls_module

支持 HLS (HTTP Live Streaming) 的模块。

hls on; 开启 HLS 支持。

ngx_http_image_filter_module

图像处理模块,可以对图像进行裁剪、缩放等操作。

image_filter resize 320 240; 对图像进行缩放操作。

ngx_http_index_module

配置默认的索引文件,例如 index.html。

index index.html; 设置默认文件为 index.html。

ngx_http_internal_redirect_module

支持内部重定向的模块,可以在不发起新的请求的情况下重定向请求。

error_page 404 = /404.html; 配置内部重定向到自定义页面。

ngx_http_js_module

支持 JavaScript 的模块,用于更复杂的 HTTP 请求处理。

js_include some_script.js; 包含 JavaScript 文件。

ngx_http_keyval_module

支持通过键值对设置变量的模块。

set $var value; 设置一个变量。

ngx_http_limit_conn_module

限制连接数的模块。

limit_conn_zone $binary_remote_addr zone=addr:10m; 限制每个客户端的连接数。

ngx_http_limit_req_module

限制请求速率的模块。

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s; 限制请求频率。

ngx_http_log_module

提供日志记录功能的模块,常用于访问日志和错误日志。

access_log /var/log/nginx/access.log; 配置访问日志。

ngx_http_map_module

根据条件设置变量值的模块,例如根据请求头或 URL 动态决定响应内容。

map $http_ua $blocked { default 0; "BadBot" 1; } 根据 User-Agent 判断是否屏蔽访问。

ngx_http_memcached_module

支持连接 Memcached 的模块。

memcached_pass 127.0.0.1:11211; 配置 Memcached 服务器地址。

ngx_http_mirror_module

支持请求镜像的模块,用于调试或故障排查。

mirror /mirror; 启用请求镜像功能。

ngx_http_mp4_module

支持 MP4 视频流的模块,通常用于播放 MP4 格式的视频文件。

mp4; 启用 MP4 文件流支持。

ngx_http_oidc_module

支持 OpenID Connect 的认证模块。

oidc_provider http://oidc.example.com; 配置 OpenID Connect 提供者。

ngx_http_perl_module

支持 Perl 脚本处理的模块。

perl_set $foo 'sub { return 42; }'; 设置 Perl 脚本变量。

ngx_http_proxy_module

支持反向代理的模块,将请求转发到后端服务器。

proxy_pass http://backend; 配置代理服务器地址。

ngx_http_proxy_protocol_vendor_module

支持 Proxy Protocol 协议的模块。

proxy_protocol on; 启用 Proxy Protocol 支持。

ngx_http_random_index_module

提供随机选择索引文件的模块。

random_index on; 启用随机索引文件选择功能。

ngx_http_realip_module

通过 X-Real-IP 或 X-Forwarded-For 等头部获取客户端真实 IP 地址的模块。

real_ip_header X-Forwarded-For; 配置获取真实 IP 地址的请求头部。

ngx_http_referer_module

用于访问控制和检查 HTTP Referer 头的模块。

referer_check www.example.com; 检查 Referer 是否来自特定域名。

ngx_http_rewrite_module

进行 URL 重写的模块。

rewrite ^/oldpage$ /newpage permanent; 将旧 URL 重写为新 URL。

ngx_http_scgi_module

支持 SCGI 协议的模块。

scgi_pass 127.0.0.1:4000; 配置 SCGI 服务器地址。

ngx_http_secure_link_module

支持安全链接的模块,用于生成和验证带有签名的 URL。

secure_link $arg_st $arg_e; 使用 URL 中的参数验证链接。

ngx_http_session_log_module

提供会话日志记录的模块。

session_log /var/log/nginx/session.log; 配置会话日志。

ngx_http_slice_module

支持将大文件切片的模块,常用于大文件下载。

slice 1m; 将响应内容切片为 1MB 大小。

ngx_http_split_clients_module

用于将请求分发到不同的服务器或路径的模块。

split_clients $remote_addr $key { 0.5% /path1; 99.5% /path2; } 根据客户端地址分流请求。

ngx_http_ssi_module

支持服务器端包含 (SSI) 的模块,通常用于动态生成网页内容。

ssi on; 启用服务器端包含功能。

ngx_http_ssl_module

提供 HTTPS 支持的模块,用于加密 HTTP 流量。

ssl_certificate /path/to/certificate.crt; 配置 SSL 证书。

ngx_http_status_module

提供服务器状态信息的模块。

location /status { stub_status on; } 显示 Nginx 服务器状态信息。

ngx_http_stub_status_module

提供简要的服务器状态信息的模块。

location /status { stub_status on; } 显示 Nginx 服务器状态信息。

ngx_http_sub_module

支持在响应中进行内容替换的模块。

sub_filter 'old' 'new'; 在响应中替换文本。

ngx_http_upstream_module

配置后端服务器组,支持负载均衡和故障转移。

upstream backend { server 127.0.0.1:8080; server 127.0.0.1:8081; } 配置负载均衡的后端服务器。

ngx_http_upstream_conf_module

提供更细粒度的后端服务器配置选项。

upstream backend { server 127.0.0.1:8080 weight=3; } 配置权重负载均衡。

ngx_http_upstream_hc_module

提供后端服务器健康检查功能。

upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; } 配置健康检查。

ngx_http_userid_module

提供用户 ID 功能的模块。

userid on; 启用用户 ID 功能。

ngx_http_uwsgi_module

支持 uWSGI 协议的模块,通常用于与 Python 应用连接。

uwsgi_pass 127.0.0.1:4000; 配置 uWSGI 服务器地址。

ngx_http_v2_module

支持 HTTP/2 协议的模块。

http2 on; 启用 HTTP/2 协议。

ngx_http_v3_module

支持 HTTP/3 协议的模块。

http3 on; 启用 HTTP/3 协议。

ngx_http_xslt_module

提供对 XSLT 转换的支持。

xslt_stylesheet /styles/style.xsl; 应用 XSLT 样式表。

ngx_mail_core_module

Nginx 邮件模块的核心功能,支持 POP3、IMAP、SMTP 等邮件协议。

mail { server { listen 25; } } 配置邮件服务器。

ngx_mail_auth_http_module

通过 HTTP 实现邮件认证的模块。

auth_http http://auth.example.com; 配置邮件认证 HTTP 请求。

ngx_mail_proxy_module

支持邮件代理功能的模块。

proxy_pass smtp://127.0.0.1:25; 配置邮件代理。

ngx_mail_realip_module

获取真实客户端 IP 地址的模块,适用于邮件代理。

real_ip_header X-Real-IP; 配置邮件的真实 IP 获取。

ngx_mail_ssl_module

提供邮件协议的 SSL/TLS 加密支持。

ssl_certificate /path/to/certificate.crt; 配置邮件 SSL 证书。

ngx_mail_imap_module

支持 IMAP 协议的邮件模块。

imap_pass 127.0.0.1:1143; 配置 IMAP 服务器地址。

ngx_mail_pop3_module

支持 POP3 协议的邮件模块。

pop3_pass 127.0.0.1:110; 配置 POP3 服务器地址。

ngx_mail_smtp_module

支持 SMTP 协议的邮件模块。

smtp_pass 127.0.0.1:25; 配置 SMTP 服务器地址。

ngx_stream_core_module

Nginx 流式数据传输模块,支持 TCP/UDP 等协议。

stream { server { listen 12345; proxy_pass 127.0.0.1:54321; } } 配置流式代理。

ngx_stream_access_module

用于限制流式连接的模块。

allow 192.168.1.0/24; deny all; 限制访问流式服务的 IP 地址。

ngx_stream_geo_module

用于流式协议中的地理位置相关配置。

geo $geoip_country { default CN; 192.168.1.0/24 US; } 配置流式协议中的地理位置。

ngx_stream_geoip_module

基于 IP 地址的地理位置识别模块,适用于流式协议。

geoip_country /path/to/GeoIP.dat; 基于 IP 地址配置地理位置。

ngx_stream_js_module

用于流式协议中的 JavaScript 支持。

js_include stream_script.js; 配置流式协议中的 JavaScript 文件。

ngx_stream_keyval_module

用于在流式协议中设置键值对变量的模块。

set $stream_key value; 配置流式协议中的键值变量。

ngx_stream_limit_conn_module

用于限制流式连接的模块。

limit_conn_zone $binary_remote_addr zone=conn_limit:10m; 限制流式连接数。

ngx_stream_log_module

用于记录流式协议的日志。

access_log /var/log/nginx/stream_access.log; 配置流式协议的日志。

ngx_stream_map_module

用于流式协议中进行动态映射设置的模块。

map $remote_addr $limit_conn { 192.168.1.1 10; default 5; } 配置流式连接的限制。

ngx_stream_mqtt_preread_module

支持 MQTT 协议预读取的模块。

mqtt_preread on; 启用 MQTT 协议的预读取功能。

ngx_stream_mqtt_filter_module

用于流式协议中的 MQTT 协议过滤功能。

mqtt_filter on; 启用 MQTT 协议的过滤功能。

ngx_stream_pass_module

用于流式代理的模块。

proxy_pass tcp://127.0.0.1:8080; 配置流式代理服务器。

ngx_stream_proxy_protocol_vendor_module

支持 Proxy Protocol 协议的流式模块。

proxy_protocol on; 启用 Proxy Protocol 支持。

ngx_stream_realip_module

用于流式协议获取真实客户端 IP 地址的模块。

real_ip_header X-Real-IP; 配置流式协议获取真实

http://www.xdnf.cn/news/17712.html

相关文章:

  • Java面试宝典:ZGC
  • PyTorch基础(Numpy与Tensor)
  • Vue3+AntDesign实现带搜索功能的下拉单选组件
  • 如何生成.patch?
  • 2025年AI大模型应用架构设计十大核心问题深度解析
  • Java pdf工具
  • Java 导出word 实现表格内插入图表(柱状图、折线图、饼状图)--可编辑数据
  • 飞算JavaAI的中间件风暴:Redis + Kafka 全链路实战
  • Android 在 2020-2025 都做哪些更新?
  • 浏览器面试题及详细答案 88道(23-33)
  • Pytorch FSDP权重分片保存与合并
  • CW32L011电机开发板控制教程
  • MVCC底层实现原理
  • Java Web开发:Session与Cookie详细入门指南
  • 深入理解 C++ 中的虚函数:原理、特点与使用场景
  • mac下载maven并配置,以及idea配置
  • 智慧城市数字孪生:城市管理的“平行宇宙”
  • nginx匹配规则
  • 计算机网络体系结构
  • framebuffer
  • 当GitHub宕机时,我们如何保持高效协作?分布式策略与应急方案详解
  • 建设有人文温度的智能社会:规划与实施路径
  • 2小时构建生产级AI项目:基于ViT的图像分类流水线(含数据清洗→模型解释→云API)(第十七章)
  • BGP综合实验_Te. BGP笔记
  • 德文识别技术:为德语用户创造更智能、更便捷的信息处理体验
  • wps--设置
  • Android 终端接入 GB28181 国标视频平台的完整解决方案解析
  • HarmonyOS 开发实战:搞定应用名字与图标更换,全流程可运行示例
  • 玩转Docker | 使用Docker部署WordPress网站服务
  • 深度学习与遥感入门(七)|CNN vs CNN+形态学属性(MP):特征工程到底值不值?