[英]Redirect all http to https in nginx, except one file
我目前在http上运行我的网站,并希望将其移至https,以便nginx自动处理重定向。 我猜这很简单。
但是,有一个文件(由于多种原因)是从其他站点进行热链接的,其中一些是通过http进行的,有些是通过https进行的。 我想确保该文件在http和https上均可用,以确保浏览器不会抱怨“混合内容”对话框。 文件的路径如下所示:
http(s)://mydomain.com/scripts/ [some_sha1_hash] /file.js
因此,nginx规则应显示:“如果请求已通过https进行,则一切正常,只需反向代理即可。否则,将所有请求从http重定向到https,除非请求了此文件,在这种情况下,请不要请勿执行此类HTTP-> https重定向。”
谁能告诉我在哪里可以了解这种配置,或者可以帮助我了解配置本身? 提前致谢。 (很抱歉,但是我对nginx的配置还不够熟练。)
这是我所做的,并且有效:
server {
listen 80;
server_name example.com;
charset utf-8;
access_log /var/www/path/logs/nginx_access.log;
error_log /var/www/path/logs/nginx_error.log;
location /path/to/script.js {
# serve the file here
}
location / {
return 301 https://example.com$request_uri;
}
}
这个仅处理http请求并提供所述文件-否则重定向到https。 定义您的ssl服务器块,它将服务于所有https请求。
server {
listen 443;
server_name example.com;
ssl on;
# rest of the config
}
这样,您的脚本文件将在http和https上可用。
尝试这个:
server {
listen 80; ssl off;
listen 443 ssl;
server_name example.com;
# <ssl settings>
# ... other settings
location = /scripts/[some_sha1_hash]/file.js {
# Empty block catches the match but does nothing with it
}
location / {
if ($scheme = "http") {
rewrite ^ https://$http_host$request_uri? permanent;
}
# ... other settings
}
}
server {
listen 80;
server_name my.domain.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443;
server_name my.domain.com;
ssl on;
[....]
}
如果我没记错的话,上面的大多数应该可以解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.