中间件:Nginx工作使用记录(反向代理)

场景:SpringBoot+Vue前后端分离,用Nginx做反向代理。

一、Nginx.conf

#定义Nginx运行的用户和用户组
user  root;
#进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
worker_processes  1; 

#nginx的错误日志路径
error_log  /var/log/nginx/error.log warn; 
#nginx服务启动时候pid 进程ID
pid        /var/run/nginx.pid;

#定义事件相关的属性
events {
    #一个进程允许处理的最大连接数
    worker_connections  1024;
}


http {
    # 文件扩展名与文件类型映射表(支持的文件类型)
    include       /etc/nginx/mime.types;
    # 默认文件类型
    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;

    # 开启gzip压缩输出
    #gzip  on;

    # 导入server配置文件
    include /etc/nginx/conf.d/*.conf;
}

二、server配置文件样例

1、a.conf

server {
    # 需要被监听的端口号,前提是此端口号没有被占用,否则在重启 Nginx 时会报错
    listen       9500;
    # 域名可以有多个,用空格隔开
    server_name  localhost;

    # 上述端口指向的根目录
    root /u01/a/a1/a-web/dist;
    # 项目根目录中指向项目首页
    index index.html;

    #client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,
    #在“Content-Length”请求头中指定。
    #如果请求的正文数据大于client_max_body_size,
    #HTTP协议会报错 413 Request Entity Too Large。
    #就是说如果请求的正文大于client_max_body_size,一定是失败的。
    #如果需要上传大文件,一定要修改该值。
    client_max_body_size 20m; 
    #Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size
    #直接将数据先在内存中存储。
    #如果请求的值大于client_body_buffer_size小于client_max_body_size,
    #就会将数据先存储到临时文件中,在哪个临时文件中呢?
    #client_body_temp 指定的路径中,默认该路径值是/tmp/.
    #所以配置的client_body_temp地址,一定让执行的Nginx的用户组有读写权限。
    #否则,当传输的数据大于client_body_buffer_size,写进临时文件失败会报错。
    client_body_buffer_size 128k;

    #传输的数据大于client_max_body_size,一定是传不成功的。
    #小于client_body_buffer_size直接在内存中高效存储。
    #如果大于client_body_buffer_size小于client_max_body_size会存储临时文件,
    #临时文件一定要有权限。
    #如果追求效率,就设置 client_max_body_size client_body_buffer_size相同的值,
    #这样就不会存储临时文件,直接存储在内存了。

    # 访问控制
    # 根请求会指向的页面 
    location / {
      # 配合@使用, 如果能找到指定的uri那么就返回相应的内容,
      #否则的话就内部重定向到后端名称为@backup的location
      # 此处的 @router 实际上是引用下面的转发,否则在 Vue 路由刷新时可能会抛出 404
      try_files $uri $uri/ @router;
      # 请求指向的首页
      index index.html;

      # 返回nginx的状态
      #stub_status on ;   
      # 允许的访问地址
      #allow 192.168.*.**;   
      # 默认禁止所有访问,除了允许的
      #deny all;                               
    }

    # 由于路由的资源不一定是真实的路径,无法找到具体文件
    # 所以需要将请求重写到 index.html 中,然后交给真正的 Vue 路由处理请求资源
    location @router {
      rewrite ^.*$ /index.html last;
    }
    # 目录列表(API控制) 
    location /api/ {
          # 后端的真实接口 反向代理
          proxy_pass http://192.168.*.**:5002/api/;
	      # 重定向 关
          proxy_redirect off;
	      #反向代理设置 proxy_set_header是用来设置请求头的,设置了请求头后,
          #后端服务器就可以获取到这些变量值。
	      #proxy_set_header Host $host;  $host就是nginx代理服务器,
          #也就是windows客户端请求的host
	      #$host代表转发服务器,$proxy_port代表转发服务器请求后端服务器的端口
          proxy_set_header Host $host;
	      #将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip
          proxy_set_header X-Real-IP $remote_addr;
	      #封装报文
	      #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Cookie $http_cookie;
          # for Ajax
          #fastcgi_param HTTP_X_REQUESTED_WITH $http_x_requested_with;
          proxy_set_header HTTP-X-REQUESTED-WITH $http_x_requested_with;
          proxy_set_header HTTP_X_REQUESTED_WITH $http_x_requested_with;
          proxy_set_header x-requested-with $http_x_requested_with;
	      #限制请求体的大小,若超过所设定的大小,返回413错误。
          client_max_body_size 10m;
	      #缓冲区代理缓冲用户端请求的最大字节数,
          client_body_buffer_size 128k;
	      #http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。
	      #此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。
	      #nginx跟后端服务器连接超时时间(代理连接超时)
          proxy_connect_timeout 1000;
	      #http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
          #后端服务器数据回传时间(代理发送超时)
	      proxy_send_timeout 1000;
	      #http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,
          #也就是容器返回的response。
	      #此参数即为服务器响应时间,默认60秒。
          #连接成功后,后端服务器响应时间(代理接收超时)
	      proxy_read_timeout 1000;
	      #设置代理服务器(nginx)保存用户头信息的缓冲区大小
          proxy_buffer_size 128k;
	      #proxy_buffers缓冲区,网页平均在32k以下的设置
          proxy_buffers 32 32k;
	      #高负荷下缓冲大小(proxy_buffers*2)
          proxy_busy_buffers_size 128k;
	      #设定缓存文件夹大小,大于这个值,将从upstream服务器传
          proxy_temp_file_write_size 128k;
    }
}

2、同模式其他文件,不同listen端口,不同root;

三、nginx.pid

#指定进程id
12597

四、mime.types

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;

    video/3gpp                                       3gpp 3gp;
    video/mp2t                                       ts;
    video/mp4                                        mp4;
    video/mpeg                                       mpeg mpg;
    video/quicktime                                  mov;
    video/webm                                       webm;
    video/x-flv                                      flv;
    video/x-m4v                                      m4v;
    video/x-mng                                      mng;
    video/x-ms-asf                                   asx asf;
    video/x-ms-wmv                                   wmv;
    video/x-msvideo                                  avi;
}

五、反向代理可选参数

#以下是一些反向代理的配置,可选.
location / {
    proxy_pass http://****;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    client_max_body_size 10m; #允许客户端请求的最大单文件字节数
    client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
    proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
    proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
    proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
    proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
    proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}

六、其他

1、参考 proxy_set_header:Nginx反向代理中proxy_set_header参数说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我也不清楚

有钱的捧个钱场,(~ ̄▽ ̄)~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值