Nginx 官方配置文档

Nginx 文档点击这里查看

添加更多的线程

  1. # 工作进程 CPU* 2 或者 CPU*3
  2. # nginx.conf
  3. worker_processes 1;

设置最多文件描述符数目

  1. # nginx.conf
  2. worker_rlimit_nofile 65535;

epoll 并发能力

epoll 是Linux内核为处理大批量文件描述符而作了改进的poll

  1. # nginx.conf
  2. events {
  3. # 单个工作进程可以允许同时建立外部连接的数量
  4. worker_connections 102400;
  5. # 启用 "惊群" (就是如果来了一个请求将会启动多个进程争先恐后的抢夺) Nginx 建议开启, Nginx 的进程是根据CPU的数量来的不会很多,影响很小,启动对突然流量的并发有很好的缓解作用
  6. accept_mutex on;
  7. # 工作进程将一次接受一个新连接
  8. multi_accept on;
  9. # 使用epoll
  10. use epoll;
  11. }

设置Nginx SSL

  1. # 以下属性中,以ssl开头的属性表示与证书配置有关。
  2. server {
  3. listen 443 ssl;
  4. # 配置HTTPS的默认访问端口为443。
  5. # 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
  6. # 如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
  7. # 需要将yourdomain.com替换成证书绑定的域名。
  8. server_name yourdomain.com;
  9. # SSL
  10. # 需要将cert-file-name.pem替换成已上传的证书文件的名称。
  11. ssl_certificate cert/cert-file-name.pem;
  12. # 需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
  13. ssl_certificate_key cert/cert-file-name.key;
  14. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  15. # SSL 超时
  16. ssl_session_timeout 10s;
  17. # 表示使用的加密套件的类型。
  18. # 表示使用的TLS协议的类型。
  19. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  20. ssl_prefer_server_ciphers on;
  21. # 路径
  22. location / {
  23. root html; #站点目录。
  24. index index.html index.htm;
  25. }
  26. }

设置Nginx WebSocket

  1. # 通过配置端口指向部署websocker的项目
  2. location /wss/ {
  3. # 配置地址
  4. proxy_pass http://127.0.0.1:82/;
  5. proxy_http_version 1.1;
  6. # 配置数据
  7. proxy_set_header Upgrade $http_upgrade;
  8. proxy_set_header Connection "Upgrade";
  9. proxy_set_header X-real-ip $remote_addr;
  10. proxy_set_header X-Forwarded-For $remote_addr;
  11. }

设置更低的超时配置

  1. # 给客户端分配keep-alive链接超时时间, 一般浏览器默认60s,nginx默认75s, 高并发10s
  2. keepalive_timeout 10s;
  3. # 设置请求头和请求体(各自)的超时时间, 考虑网络波动可以设置更低
  4. client_header_timeout 10s;
  5. # body 根据body 大小设置, 如果有上传文件项目给60s
  6. client_body_timeout 60;
  7. # 告诉nginx关闭不响应的客户端连接
  8. reset_timedout_connection on;
  9. # 服务器响应超时时间 20s; 如果返回数据不大可以设置3-5s;
  10. send_timeout 20;
  11. # ------------------------------------------
  12. # 根据服务并发能力适当调高
  13. proxy_connect_timeout 10s;
  14. proxy_send_timeout 15s;
  15. proxy_read_timeout 20s;

限制IP并发以及流量

  1. # nginx提供的的ngx_http_limit_conn_module模块实现该功能。
  2. # 为地址状态分配一个大小为size的内存存储区,限制了每秒(分、小时)只接受rate个IP的频率。
  3. limit_conn_zone $binary_remote_addr zone=one:10m;
  4. # 这将指定一个地址只能同时存在一个连接。“one”与上面的对应,也可以自定义命名, 并发数
  5. # limit_conn one 10;
  6. # 线程限速300K
  7. # limit_rate 300k;
  8. # 分配一个大小为size的内存存储区,限制了每秒(分、小时)只接受rate个IP的频率
  9. limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

Nginx 流代理

  1. # Nginx 流代理
  2. stream {
  3. log_format proxy '$remote_addr [$time_local] '
  4. '$protocol $status $bytes_sent $bytes_received '
  5. '$session_time "$upstream_addr" '
  6. '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
  7. access_log /opt/software/nginx/logs/tcp-access.log proxy ;
  8. open_log_file_cache off;
  9. # 读取配置
  10. include tcp_conf/*.conf;
  11. }
  1. # 代理的服务器地址
  2. upstream tcp9004 {
  3. server 127.0.0.1:8992;
  4. }
  5. # 入口
  6. server {
  7. listen 9004;
  8. proxy_connect_timeout 8s;
  9. proxy_timeout 24h;
  10. proxy_pass tcp9004;
  11. }

Nginx Gzip 压缩传输

  1. # 开启Gzip
  2. gzip on;
  3. # 置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
  4. gzip_min_length 1k;
  5. # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
  6. gzip_buffers 4 16k;
  7. # 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
  8. gzip_http_version 1.0;
  9. # 压缩级别, 1-10,数字越大压缩的越好,也越占用CPU时间
  10. gzip_comp_level 2;
  11. # 设置哪压缩种文本文件可参考 conf/mime.types
  12. gzip_types text/plain application/javascript application/css text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  13. # 给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本
  14. gzip_vary on;
  15. # IE 1-6禁用
  16. gzip_disable "MSIE [1-6]\.";

Nginx 热加载

  1. nginx -s reload

生产环境Nginx配置

  1. # nginx.conf
  2. user root;
  3. worker_processes 4;
  4. worker_cpu_affinity 00000001 00000010 00000100 00001000;
  5. error_log /var/log/nginx/error.log warn;
  6. pid /var/run/nginx.pid;
  7. events {
  8. worker_connections 102400;
  9. accept_mutex on;
  10. multi_accept on;
  11. use epoll;
  12. }
  13. http {
  14. include /etc/nginx/mime.types;
  15. default_type application/octet-stream;
  16. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  17. '$status $body_bytes_sent "$http_referer" '
  18. '"$http_user_agent" "$http_x_forwarded_for"';
  19. access_log /var/log/nginx/access.log main;
  20. sendfile on;
  21. send_timeout 600;
  22. tcp_nopush on;
  23. tcp_nodelay on;
  24. keepalive_timeout 6500;
  25. types_hash_max_size 204800;
  26. client_max_body_size 800M;
  27. client_body_buffer_size 128000k;
  28. gzip on;
  29. gzip_min_length 1k;
  30. gzip_vary on;
  31. gzip_comp_level 3;
  32. gzip_http_version 1.1;
  33. gzip_buffers 4 16k;
  34. limit_conn_log_level error;
  35. limit_conn_status 503;
  36. limit_conn_zone $binary_remote_addr zone=addr:1m;
  37. limit_conn addr 15;
  38. limit_rate 1m;
  39. include /etc/nginx/conf.d/*.conf;
  40. server {
  41. listen 80 default_server;
  42. server_name _;
  43. default_type 'text/html;Charset=utf-8';
  44. add_header permission-control proxy;
  45. return 200 'no permission proxy';
  46. }
  47. }

生产环境Server配置

  1. # Vue 配置
  2. server {
  3. listen 80;
  4. server_name xinsj-admin.yuemia.com;
  5. root /html/xinsj-admin;
  6. index index.html index.htm;
  7. try_files $uri $uri/ /index.html;
  8. gzip on;
  9. gzip_min_length 1k;
  10. gzip_buffers 4 16k;
  11. gzip_comp_level 6;
  12. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  13. gzip_vary off;
  14. gzip_disable "MSIE [1-6]\.";
  15. }
  16. # Api 配置
  17. server {
  18. listen 80;
  19. server_name xxx.xxxx.com;
  20. root /html/xinsj;
  21. gzip on;
  22. gzip_min_length 1k;
  23. gzip_buffers 4 16k;
  24. gzip_comp_level 6;
  25. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  26. gzip_vary off;
  27. gzip_disable "MSIE [1-6]\.";
  28. client_max_body_size 200m;
  29. client_header_timeout 30m;
  30. client_body_timeout 30m;
  31. proxy_connect_timeout 360s;
  32. proxy_read_timeout 30m;
  33. proxy_send_timeout 30m;
  34. location /mobile/ {
  35. alias /html/xinsj/mobile/;
  36. index index.html index.htm;
  37. try_files $uri $uri/ /mobile/index.html;
  38. }
  39. location /WW_verify_hXpspD3AQMjrL6vY.txt {
  40. return 200 'hXpspD3AQMjrL6vY';
  41. }
  42. location /api/ {
  43. proxy_pass http://172.16.249.147:8033/;
  44. proxy_set_header Host $http_host;
  45. proxy_set_header X-Real-IP $remote_addr;
  46. proxy_set_header X-Scheme $scheme;
  47. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  48. #socket
  49. proxy_set_header Upgrade $http_upgrade;
  50. proxy_set_header Connection "upgrade";
  51. proxy_http_version 1.1;
  52. proxy_connect_timeout 4s;
  53. proxy_read_timeout 900s;
  54. proxy_send_timeout 12s;
  55. }
  56. }

Nginx 源码

Nginx 源码下载地址

如果Nginx 用Rust 重写一遍会不会更好?

Nginx vs Tengine vs Openresty

Nginx 服务器代理工具 Openresty 基于Nginx的代理,通过Lua脚本扩容的服务器代理. Tengine 基于Nginx 的代理,淘宝开发有很多淘宝自己用的功能. 截止2021年4月底,Openresty 在服务器使用榜上上升越来越快.

目前来说,服务器最好还是Nginx 使用,边缘服务组件稳定最重要