基础配置
示例:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
说明:
user:指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes:指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
error_log:定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
pid:主模块指令,用来指定进程pid的存储文件位置。
worker_rlimit_nofile:绑定worker进程和CPU, Linux内核2.4以上可用。
HTTP 模块配置
示例:
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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
说明:
log_format: 指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。
access_log: 指定日志文件路径。
sendfile:开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
keepalive_timeout:设置客户端连接保持活动的超时时间。
负载均衡配置
示例:
upstream cszhi.com{
ip_hash;
server 192.168.8.11:80;
server 192.168.8.12:80 down;
server 192.168.8.13:8009 max_fails=3 fail_timeout=20s;
server 192.168.8.146:8080;
}
说明:
upstream:配置负载均衡器,配置其名称。这个名称可以任意指定,在后面需要的地方直接调用即可;
ip_hash:指定负载均衡的调度算法。目前nginx有4种调度算法:
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
server:指定多服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
serve 配置
端口域名配置
示例:
listen 443 ssl http2;
server_name xxx.hi-semp.com;
说明:
listen:配置服务端口。
server_name:配置服务域名。
ssl 配置
示例:
ssl_certificate cert/xxx.pem;
ssl_certificate_key cert/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4; #首选加密套件
ssl_protocols TLSv1.1 TLSv1.2; #允许的加密协议
说明:
ssl_certificate: ssl证书路径。
ssl_certificate_key:ssl证书路径。
ssl_session_cache:# 存储session参数的缓存的类型和大小
ssl_session_timeout:# session超时时间
ssl_prefer_server_ciphers:# 服务器加密优先
ssl_ciphers: # 首选加密套件
ssl_protocols:# 允许的加密协议,不建议使用TLSv1加密协议,其默认加密算法sha-1已被破解
反向代理设置
示例:
proxy_pass http://127.0.0.1:11000/api;
说明:
proxy_pass:指定代理地址
跨域设置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Content-Disposition 'attachment';
add_header Content-Type "application/octet-stream";
压缩
示例:
gzip on;
gzip_buffers 4 16k;
gzip_comp_level 5;
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
说明:
gzip:开启gzip模块,实时压缩输出数据流。
gzip_buffers:处理请求压缩的缓冲区数量和大小。
gzip_comp_level:指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源;
gzip_types:指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的;