1
iloveayu 2023-10-14 15:05:31 +08:00 via iPhone 1
不用 if ,给每个你要代的域名都单独配置 proxy pass
|
2
litchinn 2023-10-14 15:07:51 +08:00 1
|
3
ysc3839 2023-10-14 15:07:54 +08:00 via Android 1
用多个 server 不行吗?
|
4
isbase 2023-10-14 15:19:39 +08:00 1
|
5
a33291 OP 感谢各位的回复,目前通过这样配置解决了
``` location / { default_type text/html; set $flag 0; # 此处使用正则设置允许的域名 if ($host ~* (a.com|b.com)$) { set $flag 1; } if ($flag = 1) { proxy_pass $scheme://$host; } if ($flag = 0) { #return 404; } } ``` 相当于模拟了一下 if else 因为基本 server 的配置都一样(比如证书相关),所以拆成多个 server 会导致配置大量重复,容易出错,所以希望在一个 server 内解决. 再次感谢各位 |
8
Hanada 2023-10-14 22:03:31 +08:00 via Android 1
location / {
default_type text/html; proxy_pass $scheme://$host; if ($host !~* a.com$) { return 404; } } |
9
xiebruce 2023-10-15 00:32:22 +08:00
@fyzhh 不算,只有在你电脑中去代理才叫正向,服务器端去代理就是反向(虽然反向代理的目标是另一个网站),当然对服务器本身来说,这个代理是正向。
|
11
a33291 OP @ysc3839 #6 是的,找了一下资料发现可以在 http 一级设置默认证书,server 不配置则回退到 http 一级的证书配置.此外还有一些跨域和 header 的配置不确定是否都可以在 http 一级设置,示例如下
``` listen 443 ssl; ssl_certificate ../certs/localhost.pem; ssl_certificate_key ../certs/localhost.key; ssl_session_timeout 5m; ssl_prefer_server_ciphers On; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; charset utf8; if ($http_origin = ''){ set $http_origin "*"; } proxy_hide_header Access-Control-Allow-Origin; add_header Access-Control-Allow-Origin $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; add_header Access-Control-Expose-Headers 'Content-Length,Content-Range'; # multi-thread( https) add_header Cross-Origin-Opener-Policy 'same-origin'; add_header Cross-Origin-Embedder-Policy 'require-corp'; ``` 真正的需求就是内网想要访问公网一些网站(只有部分域名允许,其他均不允许),所以此时有一台服务器(双网卡同时接内网和公网)用 nginx 来做代理,内网修改 hosts 域名指向这台服务器,然后内网的机器就直接访问对应域名的网站. |
12
ysc3839 2023-10-15 11:12:00 +08:00 via Android
|