全局配置

  1. user jw jw; ## 配置 worker 进程的用户和组
  2. #当遇到403错误时,多半是这个配置的问题,直接 user root;即可
  3. worker_processes auto; ## 配置 worker 进程启动的数量,建议配置为 CPU 核心数
  4. error_log logs/error.log; ## 全局错误日志
  5. pid /run/nginx.pid; ## 设置记录主进程 ID 的文件
  6. worker_rlimit_nofile 10240; ## 单个后台 worker process 进程的最大文件数,默认1024
  7. events {
  8. #epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,比select的效率更高
  9. # use epoll
  10. # 单个后台 worker process 进程的最大并发链接数,这个值要小于等于worker_rlimit_nofile
  11. worker_connections 10240;
  12. }

http的几个默认配置解释

  1. http{
  2. include mime.types; # 文件扩展名与类型映射表
  3. default_type application/octet-stream;# 默认文件类型
  4. sendfile on; #开启高效传输模式,nginx常作为静态资源服务器,这个大大提高了性能
  5. tcp_nopush on; #提高网络包的传输效率(多个包整合发送,减少发送次数,延迟发送,实时性低),前提是开启sendfile
  6. keepalive_timeout 65; #长连接超时时间,单位是秒
  7. keepalive_requests 100; #每个连接最大的请求数,当送达的请求数超过该值后,该连接就会被关闭。
  8. tcp_nodelay on; #强调实时性,与tcp_nopush为对应配置
  9. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #日志格式
  10. '$status $body_bytes_sent "$http_referer" '
  11. '"$http_user_agent" "$http_x_forwarded_for"';
  12. access_log logs/access.log main; #成功日志
  13. }

错误页面

  1. # 开启探测
  2. # fastcgi: fastcgi_intercept_errors on;
  3. # uwsig: uwsgi_intercept_errors on;
  4. proxy_intercept_errors on;
  5. # 定义错误页面码,如果出现相应的错误页面码,转发到那里。
  6. error_page 404 403 500 502 503 504 /404.html;
  7. # 承接上面的location。
  8. location = /404.html {
  9. # 放错误页面的目录路径。
  10. root /home/project/pb;
  11. }

禁止通过ip来访问

  1. #这个server是新增,不是修改
  2. server{
  3. listen 80 default;
  4. server_name _;
  5. return 404;
  6. }

后台访问限制

  1. location /admin/{
  2. allow youip; #先允许
  3. allow 127.0.0.1;
  4. deny all; #后拒绝所用
  5. }

一个站点配置多个域名

  1. server {
  2. listen 80;
  3. server_name ops-coffee.cn b.ops-coffee.cn;
  4. }

一个服务器配置多个站点

  1. server {
  2. listen 80;
  3. server_name www.test.com;
  4. client_max_body_size 100M;
  5. location / {
  6. try_files $uri @www;
  7. }
  8. location @www{
  9. internal;
  10. proxy_pass http://127.0.0.1:6666;
  11. include req_proxy.conf;
  12. }
  13. }
  14. server {
  15. listen 80;
  16. server_name maven.test.com;
  17. client_max_body_size 20M;
  18. location / {
  19. try_files $uri @maven;
  20. }
  21. location @maven {
  22. internal;
  23. proxy_pass http://192.168.1.103:8081;
  24. include req_proxy.conf;
  25. }
  26. }
  27. server {
  28. listen 8080;
  29. server_name xxx.test.com;
  30. client_max_body_size 20M;
  31. location / {
  32. try_files $uri @maven;
  33. }
  34. location @maven {
  35. internal;
  36. proxy_pass http://192.168.1.103:8080;
  37. include req_proxy.conf;
  38. }
  39. }

隐藏Nginx版本号

  1. http {
  2. ..
  3. server_tokens off; #添加这一行内容即可
  4. ..
  5. }

301http转至https

  1. server {
  2. listen 80;
  3. server_name www.domain.com domain.com;
  4. #为什么用return而不用,rewrite,return是直接返回,rewrite是正则匹配
  5. # return的性能会比rewrite高
  6. return 301 https://www.domain.com$request_uri;
  7. }

http2

  1. server {
  2. listen 443 ssl http2;
  3. server_name default_server;
  4. ssl_certificate server.crt;
  5. ssl_certificate_key server.key;
  6. ...
  7. }

静态文件路由不进access.log

  1. location ^~ /static/ {
  2. alias /home/static/;
  3. access_log off; #对于静态文件,不记录日志
  4. }

增加响应头

  1. location /pdf {
  2. add_header Content-Disposition 'inline;filename="inline.pdf"';
  3. alias C:/Users/root/Desktop/GOProject/documents/pdf;
  4. }

使用include导入配置

  1. http{
  2. include servers/*.conf; #导入与nginx.conf同级中servers文件夹下所有的.conf
  3. }
  4. 举例:XX.conf
  5. upstream apis {
  6. ip_hash;
  7. server 127.0.0.1:8080;
  8. }
  9. server {
  10. listen 14800;
  11. server_name 10.25.138.20;
  12. client_max_body_size 2048m;
  13. ...
  14. }

请求的限制

  1. keepalive_timeout 60; # 处理时间
  2. client_header_timeout 10s; # 用户请求头的超时时间
  3. client_body_timeout 10s; # 用户请求体的超时时间
  4. client_max_body_size 100m; # 用户请求体最大字节数,默认是1m
  5. send_timeout 10s; #服务端向客户端传输数据的超时时间
  6. resolver_timeout 5s; #域名解析超时,默认30s

FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度

  1. fastcgi_connect_timeout 300; 指定连接到后端fastCGI的超时时间
  2. fastcgi_send_timeout 300; fastCGI请求的超时时间,这个值是指已经完成两次握手后向fastCGI传送的超时时间
  3. fastcgi_read_timeout 300; 接收fastCGI应答的超时时间,这个值已经完成两次握手后接收fastCGI应答的超时时间
  4. fastcgi_buffer_size 64k; 指定读取fastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,一般设置为64k
  5. fastcgi_buffers 4 64k; 指定本地需要用多少和多大的缓冲区来缓冲fastCGI的应答
  6. fastcgi_busy_buffers_size 128k; 默认值是fastcgi_buffers的两倍
  7. fastcgi_temp_file_write_size 128k; 在写入fastcgi_temp_path是用多大的数据块,默认值是fastcgi_buffers两倍

开启列目录

当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录

  1. server {
  2. location download {
  3. autoindex on;
  4. autoindex_exact_size off;
  5. autoindex_localtime on;
  6. }
  7. }
  8. autoindex_exact_size on(默认)时显示文件的确切大小,单位是byte;改为off显示文件大概大小,
  9. 单位KBMBGB
  10. autoindex_localtime off(默认)时显示的文件时间为GMT时间;改为on后,显示的文件时间为服务器时间
  11. 默认当访问列出的txt等文件时会在浏览器上显示文件的内容,如果你想让浏览器直接下载,加上下边的配置
  12. if ($request_filename ~* \.(txt|pdf|jpg|png)$) {
  13. add_header Content-Disposition 'attachment';
  14. }

拒绝User-Agent

  1. if ($http_user_agent ~* (Wget|ab|curl) ) {
  2. return 444;
  3. }
  4. 可能有一些不法者会利用wget/curl等工具扫描我们的网站,我们可以通过禁止相应的user-agent来简单的防范
  5. Nginx444状态比较特殊,如果返回444那么客户端将不会收到服务端返回的信息,就像是网站无法连接一样

WebSocket

  1. 1)编辑nginx.conf,在http区域内一定要添加下面配置:
  2. map $http_upgrade $connection_upgrade {
  3. default upgrade;
  4. '' close;
  5. }
  6. map指令的作用:
  7. 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量
  8. $http_upgrade的值创建新的变量$connection_upgrade,创建的规则就是{}里面的东西。其中的规则没有做
  9. 匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空
  10. 字符串的话,那值会是 close
  11. 2)在location匹配配置中添加如下内容:
  12. 示例如下:
  13. upstream socket.kevin.com {
  14. hash $remote_addr consistent;
  15. server 10.0.12.108:9000;
  16. server 10.0.12.109:9000;
  17. }
  18. location ^~ ws/ {
  19. proxy_pass http://socket.kevin.com;
  20. proxy_set_header Host $host:$server_port;
  21. proxy_http_version 1.1; #默认的是1.0,websocket一定要配置为1.1
  22. proxy_set_header Upgrade $http_upgrade;
  23. proxy_set_header Connection "upgrade";
  24. }