使用Nginx在80端口上代理多个.NET CORE网站
有两个.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 }