阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

最佳 Nginx 配置文件优化方案

94次阅读
没有评论

共计 6280 个字符,预计需要花费 16 分钟才能阅读完成。

最佳 Nginx 配置文件优化方案

以下是生产环境中适用的 Nginx 优化文件,你也可以根据自己的需求调优。

user www www;
 #用户 & 组
 worker_processes auto;
 #通常是 CPU 核的数量存储数据的硬盘数量及负载模式, 不确定时将其设置为可用的 CPU 内核数(设置为“auto”将尝试自动检测它)error_log /usr/local/nginx/logs/error.log crit;
 pid /usr/local/nginx/logs/nginx.pid;
 #指定 pid 文件的位置, 默认值就可以

 worker_rlimit_nofile 65535;
 #更改 worker 进程的最大打开文件数限制
 events {
 use epoll;
 multi_accept on;
 #在 Nginx 接到一个新连接通知后, 调用 accept()来接受尽量多的连接
 worker_connections 65535;
 #最大访问客户数, 修改此值时, 不能超过 worker_rlimit_nofile 值
 }
 http {
 include mime.types;
 default_type application/octet-stream;
 #使用的默认的 MIME-type
 log_format '$remote_addr - $remote_user [$time_local]"$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent""$http_x_forwarded_for"';
 #定义日志格式
 charset UTF-8;
 #设置头文件默认字符集
 server_tokens off;
 #Nginx 打开网页报错时, 关闭版本号显示
 access_log off;
 sendfile on;
 tcp_nopush on;
 #告诉 nginx 在一个数据包里发送所有头文件, 而不一个接一个的发送
 tcp_nodelay on;
 #是否启用 nagle 缓存算法, 告诉 nginx 不要缓存数据
 sendfile_max_chunk 512k;
 #每个进程每次调用传输数量不能大于设定的值, 默认为 0, 即不设上限
 keepalive_timeout 65;
 #HTTP 连接持续时间, 值越大无用的线程变的越多,0: 关闭此功能, 默认为 75
 client_header_timeout 10;
 client_body_timeout 10;
 #以上两项是设置请求头和请求体各自的超时时间
 reset_timedout_connection on;
 #告诉 nginx 关闭不响应的客户端连接
 send_timeout 30;
 #客户端响应超时时间, 若客户端停止读取数据, 释放过期的客户端连接, 默认 60s
 limit_conn_zone $binary_remote_addr zone=addr:5m;
 #用于保存各种 key, 如: 当前连接数的共享内存的参数,5m 是 5 兆字节, 这个值应该被设置的足够大, 以存储(32K*5)32byte 状态或者(16K*5)64byte 状态
 limit_conn addr 100;
 #key 最大连接数, 这里 key 是 addr, 我设置的值是 100, 这样就允许每个 IP 地址最多同时打开 100 个连接数
 server_names_hash_bucket_size 128;
 #nginx 启动出现 could not build the server_names_hash, you should increase 错误时, 请提高这个参数的值一般设成 64 就够了
 client_body_buffer_size 10K;
 client_header_buffer_size 32k;
 #客户端请求头部的缓冲区大小, 这个可以根据你的系统分页大小进行设置
 large_client_header_buffers 4 32k;
 client_max_body_size 8m;
 #上传文件大小设置, 一般是动态应用类型

 #线程池优化, 使用 --with-threads 配置参数编译
 #aio threads;
 #thread_pool default threads=32 max_queue=65536;
 #aio threads=default;
 #关于更多线程请点击查看

 #fastcgi 性能调优

 fastcgi_connect_timeout 300;
 #连接到后端 Fastcgi 的超时时间
 fastcgi_send_timeout 300;
 #与 Fastcgi 建立连接后多久不传送数据, 就会被自动断开
 fastcgi_read_timeout 300;
 #接收 Fastcgi 应答超时时间
 fastcgi_buffers 4 64k;
 #可以设置为 FastCGI 返回的大部分应答大小, 这样可以处理大部分请求, 较大的请求将被缓冲到磁盘
 fastcgi_buffer_size 64k;
 #指定读取 Fastcgi 应答第一部分需要多大的缓冲区, 可以设置 gastcgi_buffers 选项指定的缓冲区大小
 fastcgi_busy_buffers_size 128k;
 #繁忙时的 buffer, 可以是 fastcgi_buffer 的两倍
 fastcgi_temp_file_write_size 128k;
 #在写入 fastcgi_temp_path 时将用多大的数据块, 默认值是 fastcgi_buffers 的两倍, 该值越小越可能报 502 BadGateway
 fastcgi_intercept_errors on;
 #是否传递 4 **&5** 错误信息到客户端, 或允许 nginx 使用 error_page 处理错误信息.

 #fastcgi_cache 配置优化 (若是多站点虚拟主机, 除 fastcgi_cache_path(注意 keys_zone= 名称) 全部加入 php 模块中)

 fastcgi_cache fastcgi_cache;
 #开启 FastCGI 缓存并指定一个名称, 开启缓存可以降低 CPU 的负载, 防止 502 错误出现
 fastcgi_cache_valid 200 302 301 1h;
 #定义哪些 http 头要缓存
 fastcgi_cache_min_uses 1;
 #URL 经过多少次请求将被缓存
 fastcgi_cache_use_stale error timeout invalid_header http_500;
 #定义哪些情况下用过期缓存
 #fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:15m inactive=1d max_size=1g;
 #keys_zone= 缓存空间的名字,cache= 用多少内存,inactive= 默认失效时间,max_size= 最多用多少硬盘空间。#缓存目录, 可以设置目录层级, 举例:1:2 会生成 16*256 个字目录
 fastcgi_cache_key $scheme$request_method$host$request_uri;
 #定义 fastcgi_cache 的 key
 #fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

 #响应头

 add_header X-Cache $upstream_cache_status;
 #缓存命中
 add_header X-Frame-Options SAMEORIGIN;
 #是为了减少点击劫持(Clickjacking)而引入的一个响应头
 add_header X-Content-Type-Options nosniff;

 #GZIP 性能优化

 gzip on;
 gzip_min_length 1100;
 #对数据启用压缩的最少字节数, 如: 请求小于 1K 文件, 不要压缩, 压缩小数据会降低处理此请求的所有进程速度
 gzip_buffers 4 16k;
 gzip_proxied any;
 #允许或者禁止压缩基于请求和响应的响应流, 若设置为 any, 将会压缩所有请求
 gzip_http_version 1.0;
 gzip_comp_level 9;
 #gzip 压缩等级在 0 - 9 内, 数值越大压缩率越高,CPU 消耗也就越大
 gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json image/jpeg image/gif image/png;
 #压缩类型
 gzip_vary on;
 #varyheader 支持, 让前端的缓存服务器识别压缩后的文件, 代理
 include /usr/local/nginx/conf/vhosts/*.conf;
 #在当前文件中包含另一个文件内容的指令

 #静态文件的缓存性能调优

 open_file_cache max=65535 inactive=20s;
 #这个将为打开文件指定缓存,max 指定缓存数量. 建议和打开文件数一致.inactive 是指经过多长时间文件没被请求后删除缓存
 open_file_cache_valid 30s;
 #这个是指多长时间检查一次缓存的有效信息, 例如我一直访问这个文件,30 秒后检查是否更新, 反之更新
 open_file_cache_min_uses 2;
 #定义了 open_file_cache 中指令参数不活动时间期间里最小的文件数
 open_file_cache_errors on;
 #NGINX 可以缓存在文件访问期间发生的错误, 这需要设置该值才能有效, 如果启用错误缓存. 则在访问资源(不查找资源)时.NGINX 会报告相同的错误

 #资源缓存优化
 server {

 #防盗链设置

 location ~* \.(jpg|gif|png|swf|flv|wma|asf|mp3|mmf|zip|rar)$ {
 #防盗类型
 valid_referers none blocked *.renwole.com renwole.com;
 #none blocked 参数可选. 允许使用资源文件的域名
 if ($invalid_referer) {
 return 403;
 #rewrite ^/ https://renwole.com
 #若不符合条件域名, 则返回 403 或 404 也可以是域名
 }
 }
 location ~ .*\.(js|css)$ {
 access_log off;
 expires 180d;
 #健康检查或图片.JS.CSS 日志. 不需要记录日志. 在统计 PV 时是按照页面计算. 而且写入频繁会消耗 IO.
 }
 location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|swf|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
 access_log off;
 log_not_found off;
 expires 180d;
 #视图 & 元素很少改变. 可将内容缓存到用户本地. 再次访问网站时就无需下载. 节省流量. 加快访问速度. 缓存 180 天
 }
 }
 server {
 listen 80 default_server;
 server_name .renwole.com;
 rewrite ^ https://renwole.com$request_uri?;
 }
 server {
 listen 443 ssl http2 default_server;
 listen [::]:443 ssl http2;
 server_name .renwole.com;
 root /home/web/renwole;
 index index.html index.php;

 ssl_certificate /etc/letsencrypt/live/renwole.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/renwole.com/privkey.pem;

 ssl_dhparam /etc/nginx/ssl/dhparam.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
 ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

 ssl_session_cache shared:SSL:50m;
 ssl_session_timeout 1d;
 ssl_session_tickets off;
 ssl_prefer_server_ciphers on;
 add_header Strict-Transport-Security max-age=15768000;
 ssl_stapling on;
 ssl_stapling_verify on;

 include /usr/local/nginx/conf/rewrite/wordpress.conf;
 access_log /usr/local/nginx/logs/renwole.log;

 location ~ \.php$ {
 root /home/web/renwole;
 #fastcgi_pass 127.0.0.1:9000;
 fastcgi_pass unix:/var/run/www/php-cgi.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 }
 }

以上就是本站所使用的环境优化情况,如你有更好的方案不妨分享出来。如有什么有不足之处,还请谅解。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-02发表,共计6280字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中