我目前有一个 nginx VM 设置来在 3 个域之间路由流量,但目前在路由子域时遇到问题。当前配置为 PFSense -> nginx 反向代理 -> apache2。我可以正常访问根域,但每次我进入子域时,我都会被路由到根域。
这是我的服务器块配置,其中还有一些附加项目,因为我需要能够处理 websockets。
server
{
listen 80 default_server;
server_name .mydomain.com;
location /
{
proxy_pass http://<internal_server>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
server
{
listen 443 default_server;
server_name .mydomain.com;
ssl_certificate /etc/nginx/secure/nproxy.crt;
ssl_certificate_key /etc/nginx/secure/nproxy.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/secureproxy.log;
location /
{
proxy_pass http://<internal_server>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
答案1
虽然nginx
支持通配符和正则表达式server_name
,但您仍然必须在代理时指定子域。这可以使用$host
变量来完成:
server {
server_name .mydomain.com;
listen 80;
location / {
proxy_pass http://$host;
}
access_log /var/log/nginx/$host-access.log;
error_log /var/log/nginx/all-hosts-error.log;
}
foo.mydomain.com
这将在内部代理对 的请求foo.mydomain.com
。如果内部和外部域不匹配,请使用分组正则表达式:
server {
server_name ~^(?<subdomain>.+)\.mydomain\.com$;
listen 80;
location / {
proxy_pass http://$subdomain.internal.host;
}
access_log /var/log/nginx/$host-access.log;
error_log /var/log/nginx/all-hosts-error.log;
}
答案2
并重新阅读我的配置,我设法让它工作起来。