---
title: Nginx配置示例
description: "本节以负载均衡场景下，HTTP短连接场景的4core用例为例，配置nginx.conf文件，参数说明见表1所示。```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengwebs/ecosystemEnable/Nginx/kunpengnginx_05_0020.html
sourcePath: /source/zh/kunpengwebs/ecosystemEnable/Nginx/kunpengnginx_05_0020.html
indexId: c7db192158aeb6606a3214b86695965d1fbddc88309954cc664ec455e5a6af6270
---
# Nginx配置示例

本节以负载均衡场景下，HTTP短连接场景的4core用例为例，配置nginx.conf文件，参数说明见表1所示。```
user  root;
worker_processes 2;
worker_cpu_affinity
1
10;
error_log /dev/null;
worker_rlimit_nofile 102400;
events {
    worker_connections  102400;
    multi_accept on;
    use epoll;
    accept_mutex off;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log /dev/null;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay     on;
    sendfile_max_chunk 512k;
    keepalive_timeout  65;
    keepalive_requests 2000;
    client_header_buffer_size 4k;
    large_client_header_buffers 4 32k;
    server_names_hash_bucket_size 128;
    client_max_body_size 100m;
    open_file_cache max=102400 inactive=40s;
    open_file_cache_valid 50s;
    open_file_cache_min_uses 1;
    open_file_cache_errors on;
   upstream test{
       server 192.168.1.75:10000  ;
       server 192.168.2.75:11000  ;
       server 192.168.1.72:10000 ;
       server 192.168.2.72:11000 ;
       keepalive 300;
        }
   server {
        listen       10000 reuseport;
        server_name  localhost;
        access_log off;
        location / {
            root   html;
            index  index.html index.htm;
                   proxy_pass http://test;
                proxy_connect_timeout 75;
                proxy_read_timeout 300;
                proxy_send_timeout 300;
                proxy_buffer_size 4k;
                proxy_buffers   4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                proxy_headers_hash_max_size 51200;
                proxy_headers_hash_bucket_size 6400;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    # HTTPS server
        server {
         listen       20000 ssl reuseport;
         server_name  localhost;
         ssl_certificate      /usr/local/nginx/server_2048.crt;
         ssl_certificate_key  /usr/local/nginx/server_2048.key;
         ssl_session_cache    shared:SSL:1m;
         ssl_session_timeout  5m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers  "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
         ssl_prefer_server_ciphers  on;
         location / {
             root   html;
             index  index.html index.htm;
         }
     }
}
```


Nginx的配置是区块型的，包括全局配置（如user、worker_processes等）和模块配置（其中events为events模块，http为http模块），每个模块配置中又分为各个区块，如http模块中有server区块，server有location区块。


**表1 Nginx基本配置与参数说明**

| 配置模块 | 参数 | 说明 |
| --- | --- | --- |
| 配置全局 | user root; | 定义Nginx运行的用户和用户组。 |
| 配置全局 | worker\_processes 3; | Nginx进程数，建议设置为等于CPU总核心数。 |
| 配置全局 | worker\_cpu\_affinity 1 10 100; | 通过worker\_cpu\_affinity给每个worker进程绑定一个CPU， 1表示启用core0，10表示启用core1，100表示启动core2，依次类推，100000表示启用core5，1后面有n个0就表示启动core n。 |
| 配置全局 | error\_log /dev/null; | 错误日志文件路径，/dev/null表示关闭Nginx日志。 |
| 配置全局 | worker\_rlimit\_nofile 102400; | 指定一个Nginx进程打开的最多文件描述符数目，受系统进程的最大打开文件数量（ulimit\-n）限制。 |
| 配置events模块 | worker\_connections 102400; | 定义每个进程的最大连接数，受系统进程的最大打开文件数量限制，并发总数是worker\_processes和worker\_connections的乘积。 |
| 配置events模块 | multi\_accept on; | 设置一个进程是否同时接受多个网络连接，如果multi\_accept被禁止了，Nginx一个工作进程只能同时接受一个新的连接。 |
| 配置events模块 | use epoll; | 设置工作模式为epoll，除此之外还有select、poll、kqueue、rtsig和/dev/poll模式。 |
| 配置events模块 | accept\_mutex on; | 打开accept\_mutex，避免了worker争夺资源造成的上下文切换以及try\_lock的锁开销。 |
| 配置HTTP模块 | include mime.types; | 文件扩展名与文件类型映射表。 |
| 配置HTTP模块 | default\_type application/octet\-stream; | 默认文件类型。 |
| 配置HTTP模块 | access\_log /dev/null; | Nginx访问日志路径，/dev/null表示关闭访问日志。 |
| 配置HTTP模块 | sendfile on; | 开启高效文件传输模式，获取文件跨过用户态；gzip压缩器需要在用户态进行，因此无法和sendfile共存。 |
| 配置HTTP模块 | tcp\_nopush on; | 开启防止网络阻塞，返回数据的首个数据包会携带从sendfile中获取大块的数据后才会被发送。 |
| 配置HTTP模块 | tcp\_nodelay on; | 开启防止网络阻塞。 |
| 配置HTTP模块 | sendfile\_max\_chunk 512k; | 限制最大sendfile的文件大小，防止过大的文件占据整个工作进程默认为“无限制”。 |
| 配置HTTP模块 | keepalive\_timeout 65; | 设置长连接的超时时间。 |
| 配置HTTP模块 | keepalive\_requests 2000; | 设置一个keep\-alive连接上可以服务的请求的最大数量。当最大请求数量达到时，连接被关闭。 |
| 配置HTTP模块 | client\_header\_buffer\_size 4k; | 客户端请求头部的缓冲区大小，这个可以根据你的系统分页大小来设置，一般一个请求的头部大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 |
| 配置HTTP模块 | large\_client\_header\_buffers 4 32k; | 设置客户端请求的Header头缓冲区大小：4为个数，32k为大小，表示申请4个32k。默认会用client\_header\_buffer\_size这个buffer来读取header值，如果header过大，它会使用large\_client\_header\_buffers来读取。 |
| 配置HTTP模块 | server\_names\_hash\_bucket\_size 128; | 保存服务器名字的hash表的大小。 |
| 配置HTTP模块 | client\_max\_body\_size 100m; | 控制全局nginx所有请求报文大小，100MB。 |
| 配置HTTP模块 | open\_file\_cache max=102400 inactive=40s; | max设置缓存中的最大元素数，在缓存溢出时，删除最近最少使用（LRU）的元素；inactive定义一个时间，如果在此期间未访问该元素，则从该缓存中删除该元素。 |
| 配置HTTP模块 | open\_file\_cache\_valid 50s; | 多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件，50s后会检查此文件的更改信息是否变化，发现变化就更新。 |
| 配置HTTP模块 | open\_file\_cache\_min\_uses 1; | open\_file\_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件更改信息一直是在缓存中打开的。 |
| 配置HTTP模块 | open\_file\_cache\_errors on; | 启用文件查找错误的缓存。 |
| 配置upstream test （反向代理服务器组test。Nginx会根据配置，将请求分发给组里的某一台服务器。） | server 192.168.1.75:1000; server 192.168.2.75:11000; server 192.168.1.73:10000; server 192.168.2.73:11000; | 配置处理最终请求的服务器IP地址及端口。 |
| 配置upstream test （反向代理服务器组test。Nginx会根据配置，将请求分发给组里的某一台服务器。） | keepalive 300; | 设置Nginx每个worker进程和后端服务器之间的空闲长连接数。 |
| 设定主机配置 | listen 10000 reuseport; | 侦听10000端口，HTTP短连接场景建议打开reuseport，长连接可复用。 |
| 设定主机配置 | server\_name localhost; | 定义使用localhost访问。 |
| 设定主机配置 | access\_log off; | 关闭本虚拟主机的访问日志。 |
| 设定主机配置 | 默认请求 | 默认请求 |
| 设定主机配置 | root html; | 定义服务器的默认网站根目录位置，root是web根目录。 |
| 设定主机配置 | index index.html index.htm; | 定义首页索引文件的名称及顺序。 |
| 设定主机配置 | proxy\_pass http://test; | 表示将所有请求转发到服务器组test配置的服务器中。 |
| 设定主机配置 | proxy\_connect\_timeout 75; | 设置后端服务器的连接超时时间。 |
| 设定主机配置 | proxy\_read\_timeout 300; | 设置Nginx与后端服务器建立连接后，等待后端服务器的响应时间 |
| 设定主机配置 | proxy\_send\_timeout 300; | 指定请求转移到后端服务器的超时时间，超时Nginx将关闭连接。 |
| 设定主机配置 | proxy\_buffer\_size 4k; | 设置用于保存用户头部信息的代理缓冲区大小。 |
| 设定主机配置 | proxy\_buffers 432k; | 设置缓冲区的数目和大小。 |
| 设定主机配置 | proxy\_busy\_buffers\_size 64k; | 用于当系统负载较大，缓冲区不够用时，可以设置更大的proxy\_buffers。 |
| 设定主机配置 | proxy\_temp\_file\_write\_size 64k; | 用于指定缓存临时文件的大小。 |
| 设定主机配置 | proxy\_http\_version 1.1; | 设置Nginx服务器提供代理服务的http协议版本1.1。 |
| 设定主机配置 | proxy\_set\_header Connection ""; | 允许重新定义和添加一些将被转移到被代理服务器的请求头部信息。 |
| 设定主机配置 | proxy\_headers\_hash\_max\_size 51200; | 存放http报文头的哈希表容量上限。 |
| 设定主机配置 | proxy\_headers\_hash\_bucket\_size 6400; | Nginx服务器申请存放http报文头的哈希表容量大小。 |
| 设定主机配置 | error\_page 500 502 503 504 /50x.html; location = /50x.html { root html;} | 定义错误提示页面。 |
| 配置SSL加密 | listen 20000 ssl; | 侦听20000端口。 |
| 配置SSL加密 | server\_name localhost; | 定义使用localhost访问。 |
| 配置SSL加密 | ssl\_certificate /usr/local/nginx/server\_2048.crt; | ssl\_certificate证书是公钥，它会被发送到连接服务器的每个客户端。 |
| 配置SSL加密 | ssl\_certificate\_key /usr/local/nginx/server\_2048.key; | ssl\_certificate\_key 私钥 是用来解密的，所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中，这种方式也只有公钥证书才发送到client。 |
| 配置SSL加密 | ssl\_session\_cache shared:SSL:1m; | 设置SSL会话缓存的类型和大小，shared:SSL:1m表示所有的Nginx工作进程共享SSL会话缓存，1M可以存放约4000个sessions。 |
| 配置SSL加密 | ssl\_session\_timeout 5m; | 客户端可以重用会话缓存中SSL参数的过期时间，5分钟。 |
| 配置SSL加密 | ssl\_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; | 用于启动特定的加密协议。 |
| 配置SSL加密 | ssl\_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; | 选择加密套件。 |
| 配置SSL加密 | ssl\_prefer\_server\_ciphers on; | 设置协商加密算法时，优先使用我们服务端的加密套件，而不是客户端浏览器的加密套件。 |
| 配置SSL加密 | 默认请求 | 默认请求 |
| 配置SSL加密 | root html; | 定义服务器的默认网站根目录位置，root是web根目录。 |
| 配置SSL加密 | index index.html index.htm; | 定义首页索引文件的名称及顺序。 |
