nginx发送301重定向到http而不是https
在Docker容器中运行nginx发送301重定向到http而不是https,nginx,Nginx,在Docker容器中运行nginx 1.11.6 我有许多重定向,其形式为/old/content->/new/content 然而,nginx正在将来自https的访问者重定向到http: https://example.com/old/content->http://example.com/new/content 我有一个重定向规则,可以将所有http流量重定向回https,但这会创建一个重定向链,我正试图消除它 有没有办法强迫nginx不使用url的协议部分 以下是我的配置示例: gzip
nginx 1.11.6
我有许多重定向,其形式为/old/content
->/new/content
然而,nginx正在将来自https
的访问者重定向到http
:
https://example.com/old/content
->http://example.com/new/content
我有一个重定向规则,可以将所有http
流量重定向回https
,但这会创建一个重定向链,我正试图消除它
有没有办法强迫nginx不使用url的协议部分
以下是我的配置示例:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
text/plain text/css text/js text/javascript text/xml
application/json application/javascript application/x-javascript
application/xml application/xml+rss
application/x-pdf application/pdf;
rewrite ^/(.*)/$ /$1 permanent;
proxy_intercept_errors on;
error_page 404 /404;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
location /old/content {
rewrite ^/.* /new/content permanent;
}
location /old/content2 {
return 301 /new/content2;
}
location /old/content3 {
return 302 /new/content3;
}
使用
nginx:1.11.6
本地修改了您的nginx配置,这是一个工作版本:
error_page 404 /404;
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /tmp/ssl.pem;
ssl_certificate_key /tmp/ssl-key.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
proxy_intercept_errors on;
rewrite ^/(.*)/$ /$1 permanent;
location /old/content {
rewrite ^/.* /new/content permanent;
}
location /old/content2 {
return 301 /new/content2;
}
location /old/content3 {
return 302 /new/content3;
}
}
请注意:
- 当您要将流量从http重定向到https时,建议使用
而不是return 301
redirect
- 在您的用例中,建议分隔两个服务器块,一个用于http,另一个用于https