【发布时间】:2014-09-26 06:08:34
【问题描述】:
我的公司正在使用 nginx 运行网络服务器。设置了配置,以便使用位置块将某个服务器块上的每个请求强制重写为 https。这是特定域的完整配置:
# HTTP server
server {
listen 80;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
rewrite ^(.*) https://$host$1 permanent;
}
# HTTPS server
server {
listen 443;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
root /usr/share/nginx/html/mydomain_server;
ssl on;
ssl_certificate /etc/certs/mydomain-bundle.crt;
ssl_certificate_key /etc/certs/mydomain.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/mydomain.ssl.access.log main;
error_log /var/log/nginx/mydomain.ssl.error.log error;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404-mydomain.html;
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
此域为不同客户提供同一软件的多个实现,其工作方式如下:
Customer John: www.domain.com/John
Customer Ada: www.domain.com/Ada
etc...
显然,如您所见,对此类 URL 的所有访问都被重定向到 HTTPS。
现在,特别需要单个客户,而不是这种情况。
我一直在阅读有关位置的官方文档 here,它告诉我不能不匹配特定的表达式(如 here too 所述),我找不到让它工作的方法。
我尝试在默认路径之前添加另一个与客户路径匹配的位置块,如下所示:
server {
listen 80;
server_name www.mydomain.it mydomain.it admin.mydomain.it;
root /usr/share/nginx/html/mydomain_server;
location ^~ /Mole/ {
try_files $uri $uri/ =404;
}
location / {
rewrite ^(.*) https://$host$1 permanent;
try_files $uri $uri/ =404;
}
}
这不起作用,因为 Mole 仍被重定向到 HTTPS。我试过使用“~”、“=”甚至简单的“location /Mole/”,但没有成功。不是浏览器缓存问题,因为我已经尝试过刷新它。我错过了什么?
【问题讨论】:
-
你检查过 curl/wget 吗?你有永久重定向,你的浏览器可能缓存了它。
-
正如最后所说,我检查了。尝试使用具有匿名会话/刷新缓存的不同浏览器。
-
缓存与 301 无关。浏览器历史记录是。在您的历史记录窗口中,右键单击该站点的条目并查找“忘记此站点”选项。这也应该清除您可能设置的任何严格传输安全标头。并且总是尝试使用 curl,浏览器不可靠 - 隐藏的功能太多。但是你的错误很可能是你的 server 块中没有定义 webroot,那么 try_files 匹配的是什么?
-
@Melvyn,虽然我忘了提,但我复制了“root /usr/share/nginx/html/mydomain_server;”普通 http 服务器块中的行。关于 curl 的测试,我会尽快尝试。
标签: nginx