32b*_*oat 2 rewrite nginx https ubuntu-11.04
这是关于两个子域。第一个 (www) 应该通过 http 访问。第二个(云)应该通过 https 访问。
这些是我的条目的相关部分:
server {
listen 80;
server_name cloud.example.de;
rewrite ^ https://$server_name$request_uri? permanent; # enforce https
}
server {
listen 443 ssl;
server_name cloud.example.de;
root /home/user/web/cloud;
}
server {
listen 80;
server_name www.example.de;
root /home/user/web/cms;
#etc.
}
Run Code Online (Sandbox Code Playgroud)
当我现在调用http://cloud.example.de 时,我被重定向到https://cloud.example.de,很好。但是当我调用http://www.example.de 时,我也被重定向到https://www.example.de,这会将我带到 cloud.example.com 的内容,因为这是唯一设置为的服务器名称由端口 443 使用
。 www 子域的访问日志中没有条目。
还有另一个指向 phpPgAdmin 的子域。我可以正常访问它,它不会被重写。
server {
listen 80;
server_name pgsql.example.de;
root /home/user/web/phppgadmin;
#etc
}
Run Code Online (Sandbox Code Playgroud)
有什么不见了?仅当服务器名称匹配 cloud.example.de 时才应进行重写。
服务器条目的顺序是否相关或无关紧要?
在 Ubuntu 11.04 上使用 nginx 0.8.54。
您提供的示例配置看起来是正确的,我怀疑它是否能像您描述的那样工作(您在尝试简化它时可能做了太多更改)。
您是否在诸如curl
或仅在浏览器中收到错误的重定向?我处理过permanent
在 Mozilla 中永久缓存的情况(例如从之前的nginx.conf
),没有任何方法可以使单个301
缓存条目无效,所以,您确定这不是缓存问题吗?
在任何情况下,您也可以尝试使用if
使重定向有条件(也许第一台服务器被选为默认服务器):
if ($host = "cloud.example.de") {
rewrite ^ https://$server_name$request_uri? redirect;
}
return 403;
Run Code Online (Sandbox Code Playgroud)
或者,另一种选择,
server {
listen 80;
listen 443 ssl;
server_name cloud.example.de;
if ($scheme != "https") {
rewrite ^ https://$server_name$request_uri? redirect;
}
root /home/user/web/cloud;
}
Run Code Online (Sandbox Code Playgroud)
并尝试curl -v
确保您看到那里的内容。
归档时间: |
|
查看次数: |
23534 次 |
最近记录: |