使用Nginx在80端口上代理多个.NET CORE网站

  • A+
所属分类:linux技术
摘要

有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://192.168.2.32时访问A网站,访问http://192.168.2.32/bmd/ 时访问的是B网站。

有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://192.168.2.32时访问A网站,访问http://192.168.2.32/bmd/ 时访问的是B网站。

在Nginx里配置两个location可以实现,但会导致B网站的样式和js丢失(B网站页面引用js和css的方式是/css/*和/js/*)。

经过摸索,通过在location /中配置$http_referer来进行跳转,即可完美实现A、B两个网站独立访问。

具体配置如下:

  1 # For more information on configuration, see:   2 #   * Official English Documentation: http://nginx.org/en/docs/   3 #   * Official Russian Documentation: http://nginx.org/ru/docs/   4    5 user root;   6 worker_processes auto;   7 error_log /var/log/nginx/error.log;   8 pid /run/nginx.pid;   9   10 # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.  11 include /usr/share/nginx/modules/*.conf;  12   13 events {  14     worker_connections 1024;  15 }  16   17 http {  18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  19                       '$status $body_bytes_sent "$http_referer" '  20                       '"$http_user_agent" "$http_x_forwarded_for"';  21   22     access_log  /var/log/nginx/access.log  main;  23     gzip                on;  24   25     sendfile            on;  26     tcp_nopush          on;  27     tcp_nodelay         on;  28     keepalive_timeout   65;  29     types_hash_max_size 2048;  30   31     include             /etc/nginx/mime.types;  32     default_type        application/octet-stream;  33   34     # Load modular configuration files from the /etc/nginx/conf.d directory.  35     # See http://nginx.org/en/docs/ngx_core_module.html#include  36     # for more information.  37     include /etc/nginx/conf.d/*.conf;  38   39     server {  40         listen       80;  41         listen       [::]:80;  42         server_name  web;  43         #root         /usr/share/nginx/html;  44   45         # Load configuration files for the default server block.  46         include /etc/nginx/default.d/*.conf;  47   48         location / {              49             proxy_http_version 1.1;  50             proxy_set_header Upgrade $http_upgrade;  51             proxy_set_header Connection keep-alive;  52             proxy_set_header Host $host;  53             proxy_set_header X-Real-IP $remote_addr;  54             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  55             proxy_cache_bypass $http_upgrade;  56             proxy_set_header X-NginX-Proxy true;  57             if ($http_referer ~ 'bmd')  58              {  59                #permanent代表301永久跳转,redirect为302临时跳转,这里的配置是核心,凡是bmd的前缀都带上bmd,从而解决了/css和/js引用404的问题  60                rewrite ^/(.*)$ http://$host/bmd/$1 permanent;  61              }  62             proxy_pass http://127.0.0.1:5000/;  63         }  64         location ^~/bmd/ {  65             root /usr/local/whitelist;  66             proxy_http_version 1.1;  67             proxy_set_header Upgrade $http_upgrade;  68             proxy_set_header Connection keep-alive;  69             proxy_set_header Host $host;  70             proxy_set_header X-Real-IP $remote_addr;  71             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  72             proxy_cache_bypass $http_upgrade;  73             proxy_set_header X-NginX-Proxy true;  74             #rewrite ^/bmd/(.*)$ /$1 break;  75             #proxy_redirect ~^http://192.168.2.32/bmd/(.*)$ http://127.0.0.1:5001/$1;  76             proxy_pass http://127.0.0.1:5001/;  77         }  78        location /Nginxstatus {  79            stub_status on;  80            access_log /usr/local/nginx/logs/status.log;  81            auth_basic "NginxStatus";  82         }  83   84         error_page 404 /404.html;  85             location = /40x.html {  86         }  87   88         error_page 500 502 503 504 /50x.html;  89             location = /50x.html {  90         }  91     }  92   93     server {  94         listen       8000;  95         listen       [::]:8000;  96         server_name  api;  97         #root         /usr/share/nginx/html;  98   99         # Load configuration files for the default server block. 100         include /etc/nginx/default.d/*.conf; 101  102         location /api/v1 { 103             proxy_pass http://127.0.0.1:5003; 104             proxy_http_version 1.1; 105             proxy_set_header Upgrade $http_upgrade; 106             proxy_set_header Connection keep-alive; 107             proxy_set_header Host $host; 108             proxy_set_header X-Real-IP $remote_addr; 109             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 110             proxy_cache_bypass $http_upgrade; 111         } 112  113         error_page 404 /404.html; 114             location = /40x.html { 115         } 116  117         error_page 500 502 503 504 /50x.html; 118             location = /50x.html { 119         } 120     } 121 }