当我浏览 sub.example.com 时,它只会转到 example.com 的 index.html 并且不使用子域配置。
# redirect all traffic to https
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
root /var/www/html/example;
index index.html index.htm index.php;
server_name example.com;
include /etc/nginx/ssl.conf;
client_max_body_size 0;
location / {
try_files $uri $uri/ /index.html /index.php?$args =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php7-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php7-fpm:
#fastcgi_pass unix:/var/run/php7-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
server {
listen 443 ssl;
server_name sub.example.com;
include /etc/nginx/ssl.conf;
location / {
proxy_pass http://#internalip#/;
include /etc/nginx/proxy.conf;
}
}
IE:当我访问 example.com 时,它会加载 /var/www/html/example/index.html,而当我访问 sub.domain.com 时,它仍然加载 /var/www/html/example/index.html,而不是重定向到http://#internalip#/就像它应该的那样。有什么想法吗?我这里的配置肯定出了问题。
答案1
你已经硬编码了一个永恒的(由浏览器无限期缓存)不仅针对 example.com 域名进行重定向,而且由于端口 80 上没有为纯 http 定义其他服务器,每一个(子)域和全部HTTP 请求被重定向到https://example.com
你可能想要类似的东西
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
$host
在其中生成到原始请求中使用的名称的重定向。
请注意,更改配置后,您需要清除 Web 浏览器缓存或使用新的匿名浏览器窗口来测试并使缓存的永久重定向无效