Nginx作为一个高性能的web服务器、反向代理服务器,在web应用中是不可缺少的,相信每个做web应用的都在使用它,但它的配置具体有哪些,都是什么意思,怎么调优估计没多少人认真研究,接下来就根据我的实战配置来讲讲它的配置项解释。
Nginx的配置文件通常分为几个部分:main(全局设置)、events(事件设置)、http(http相关设置)以及server(服务器特定设置)。每个部分都包含了影响Nginx行为的指令。
可以将main、events、http配置合并在nginx.conf配置里,打开nginx.conf,配置如下:
#定义了Nginx进程运行的用户和组,这里使用的是nginx用户和组user nginx nginx;# 定义了Nginx的工作进程数,这里设置为2,通常与CPU核心数相匹配worker_processes 2;#将work process绑定到特定cpu上,避免进程在cpu间切换的开销,#如2核为01 10,四核为0001 0010 0100 1000,依次类推;有多少个核,就有几位数,最多开启8个#1表示该内核开启,0表示该内核关闭。worker_cpu_affinity 01 10;# 错误日志存在目录及日志级别[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error.log warn;# 指定 pid 存放的路径pid /var/run/nginx.pid;# 定义了工作进程的最大文件打开数限制,最好小于/etc/security/limits.conf 系统配置里的nofile 数量worker_rlimit_nofile 32000;events {#单个进程允许的客户端连接数,一般比worker_rlimit_nofile小worker_connections 16000;# 告诉nginx收到一个新连接通知后接受尽可能多的连接multi_accept on;#epoll比poll和select性能更好,适用于高并发场景use epoll;}http {#包含MIME类型配置文件include /etc/nginx/mime.types;#定义默认的MIME类型default_type application/octet-stream;#定义了访问日志的格式和存放路径,更多格式设置可参考官方文档log_format main \\\'$remote_addr - $remote_user [$time_local] \\\"$request\\\" $status $body_bytes_sent \\\"$http_referer\\\" \\\"$http_user_agent\\\" \\\"$request_uri\\\"\\\';access_log /var/log/nginx/access.log main;# 启动内容压缩,有效降低网络流量gzip on;# 过短的内容压缩效果不佳,压缩过程还会浪费系统资源gzip_min_length 10k;# 可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高gzip_comp_level 4;# 压缩的内容类别gzip_types text/plain text/css application/javascript application/x-javascript application/json text/xml application/xml application/xml+rss application/x-httpd-php text/javascript image/jpeg image/gif image/png;# 是否在http header中添加Vary: Accept-Encoding,建议开启gzip_vary on;gzip_static on;# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=p style=\\\"display:none\\\" data-type=\\\"png\\\" data-w=\\\"517\\\" style=\\\"width: 100%;height: auto;\\\">下面以s-admin-80.conf为例讲解:
打开文件所有配置如下:
server {listen 80; #监听的端口server_name admin.****.com; # 访问的域名# 直接返回301重定向到HTTPS,如果没有ssl证书,将下面server 除去SSL证书配置部分COPY到这里就可以了return 301 https://$server_name$request_uri;}server {listen 443 ssl; #监听的端口server_name admin.****.com;# SSL证书配置,具体配置要参考ssl颁发机构部署说明ssl_certificate /etc/nginx/cert/certificate.pem;ssl_certificate_key /etc/nginx/cert/certificate.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;#设置为 off 后端服务器可以收到原始的 URLproxy_redirect off;#后端服务器可以获得原始请求的 Host 头部信息proxy_set_header Host $host;# 后端服务器识别客户端的真实 IP 地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#指示原始请求使用的是 HTTP 还是 HTTPSproxy_set_header X-Forwarded-Proto $scheme;#表示原始请求使用的端口号proxy_set_header X-Forwarded-Port $server_port;#将客户端请求中的 Cookie 头部传递给后端服务器proxy_set_header Cookie $http_cookie;# 定义请求的处理规则,可以匹配不同的URL路径或正则表达location / {#指定网站内容的根目录root /usr/share/nginx/html;#定义默认首页文件,当请求一个目录时使用index index.html index.htm;}# 路径中如有api则转发到本机的8001服务端口location ^~ /api/ {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://127.0.0.1:8001;}# 静态文件location .\\\\.(gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {# 验证 Referer 头部,用于防盗链,# none 表示不包括任何来源,# blocked 表示所有未明确列出的来源都将被拒绝# 正则表达式,表示所有以 .example.com 结尾的域名都是有效的来源。valid_referers none blocked server_names ~\\\\.example\\\\.com$;#定义了当请求被拒绝时返回的自定义错误页面error_page 403 /usr/share/nginx/403.html;#不在 Nginx 的访问日志文件中记录这些请求access_log off;#缓存有效期为 30 天expires 30d;}# 当 HTTP 状态码为 500、502、503 或 504 的错误时转到50x.html页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}以上配置是我在生产中使用的配置,当然还有更多配置满足不同需求,这里不作过多列举了。
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49909.html