1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 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区块。
配置模块 |
参数 |
说明 |
---|---|---|
配置全局 |
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的乘积。 |
multi_accept on; |
设置一个进程是否同时接受多个网络连接,如果multi_accept被禁止了,Nginx一个工作进程只能同时接受一个新的连接。 |
|
use epoll; |
设置工作模式为epoll,除此之外还有select、poll、kqueue、rtsig和/dev/poll模式。 |
|
accept_mutex on; |
打开accept_mutex,避免了worker争夺资源造成的上下文切换以及try_lock的锁开销。 |
|
配置HTTP模块 |
include mime.types; |
文件扩展名与文件类型映射表。 |
default_type application/octet-stream; |
默认文件类型。 |
|
access_log /dev/null; |
Nginx访问日志路径,/dev/null表示关闭访问日志。 |
|
sendfile on; |
开启高效文件传输模式,获取文件跨过用户态;.gzip压缩器需要在用户态进行,因此无法和sendfile共存。 |
|
tcp_nopush on; |
开启防止网络阻塞,返回数据的首个数据包会携带从sendfile中获取大块的数据后才会被发送。 |
|
tcp_nodelay on; |
开启防止网络阻塞。 |
|
sendfile_max_chunk 512k; |
限制最大sendfile的文件大小,防止过大的文件占据整个工作进程默认为“无限制”。 |
|
keepalive_timeout 65; |
设置长连接的超时时间。 |
|
keepalive_requests 2000; |
设置一个keep-alive连接上可以服务的请求的最大数量。当最大请求数量达到时,连接被关闭。 |
|
client_header_buffer_size 4k; |
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 |
|
large_client_header_buffers 4 32k; |
设置客户端请求的Header头缓冲区大小:4为个数,32k为大小,表示申请4个32k。默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。 |
|
server_names_hash_bucket_size 128; |
保存服务器名字的hash表的大小。 |
|
client_max_body_size 100m; |
控制全局nginx所有请求报文大小,100MB。 |
|
open_file_cache max=102400 inactive=40s; |
max设置缓存中的最大元素数,在缓存溢出时,删除最近最少使用(LRU)的元素;inactive定义一个时间,如果在此期间未访问该元素,则从该缓存中删除该元素。 |
|
open_file_cache_valid 50s; |
多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件,50s后会检查此文件的更改信息是否变化,发现变化就更新。 |
|
open_file_cache_min_uses 1; |
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的。 |
|
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地址及端口。 |
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端口。 |
server_name localhost; |
定义使用localhost访问。 |
|
ssl_certificate /usr/local/nginx/server_2048.crt; |
ssl_certificate证书是公钥,它会被发送到连接服务器的每个客户端。 |
|
ssl_certificate_key /usr/local/nginx/server_2048.key; |
ssl_certificate_key |
|
ssl_session_cache shared:SSL:1m; |
设置SSL会话缓存的类型和大小,shared:SSL:1m表示所有的Nginx工作进程共享SSL会话缓存,1M可以存放约4000个sessions。 |
|
ssl_session_timeout 5m; |
客户端可以重用会话缓存中SSL参数的过期时间,5分钟。 |
|
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; |
设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。 |
|
默认请求 |
||
root html; |
定义服务器的默认网站根目录位置,root是web根目录。 |
|
index index.html index.htm; |
定义首页索引文件的名称及顺序。 |