操作方法:Nginx 使用重写 301 规则将 HTTP 重定向到 HTTPS
我已将nginx 设置为安全反向代理服务器。如何在 nginx Web 服务器下将所有 http://example.com/ 请求(流量)重定向到 https://example.com/?如何配置 Nginx 以将 HTTP 重定向到 HTTPS?
您可以使用 Nginx Web 服务器轻松地将所有 http 请求重写/重定向到 https。语法如下。您需要在 location 或 server 指令中添加以下内容。本快速指南介绍如何在 Nginx 中将 HTTP 流量重定向到 HTTPS。
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | Unix/Linux 上的 Nginx |
预计阅读时间 | 3 分钟 |
Nginx 将 HTTP 重定向到 HTTPS
现在您已为 Nginx 配置并安装了 SSL 证书,现在是时候删除所有 HTTP 流量并将用户发送到 HTTPS 版本了。编辑 nginx.conf 文件:
sudo vi /etc/nginx/nginx.conf
if ($host ~* ^(example\.com|www\.example\.com)$ ){ rewrite ^/(.*)$ https://example.com/$1 permanent; }
或者最好使用以下重写:
rewrite ^ https://$server_name$request_uri? permanent;
或者使用新语法(推荐):
return 301 https://$server_name$request_uri;
使用 Nginx 服务器将所有 HTTP 请求重定向到 HTTPS
编辑你的 nginx.conf 文件,输入:
# vi nginx.conf
你需要定义 http 和 https 服务器,如下所示:
################################ ## our HTTP server at port 80 ## ################################ server { listen 80 default; ## set up domain name here ## server_name www.example.com example.com access_log off; error_log off; ##** nginx redirect ALL http requests to https ** ## return 301 https://$server_name$request_uri; } ######################################################################### ## Our HTTPS server at port 443. You need to provide ssl config below ### ######################################################################### server { access_log logs/example.com/ssl_access.log main; error_log logs/example.com/ssl_error.log; index index.html; root /usr/local/nginx/html; ## start ssl config ## listen 443 http2 ssl; server_name www.example.com example.com ## redirect www to nowww if ($host = 'www.example.com' ) { rewrite ^/(.*)$ https://example.com/$1 permanent; } ### ssl config - customize as per your setup ### ssl_certificate ssl/example.com/example.com_combined.crt; ssl_certificate_key ssl/example.com/example.com.key_without_password; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; keepalive_timeout 70; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ### Rest of my config. It is optional. Do it only if you have Apache on backend ## ## PROXY backend location / { add_header Front-End-Https on; add_header Cache-Control "public, must-revalidate"; add_header Strict-Transport-Security "max-age=2592000; includeSubdomains"; proxy_pass http://exampleproxy; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
保存并关闭文件。重新加载或重新启动 nginx 服务器:
# nginx -s reload
测试它:
示例输出:
$ curl -I http://example.com
$ curl -I http://example.com/foo/bar/file.html
图 01 在 Nginx 服务器中将 301 HTTP 重写为 HTTPS
重定向所有 HTTP 流量
在您的 nginx.conf 中编辑或添加以下内容:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; }
该return指令停止处理并向客户端返回指定的代码。非标准代码 444 会关闭连接而不发送响应标头。在上面的示例中,我们返回 HTTP 代码 301:
可以使用以下代码:
return code URL;
return 301 URL;
return 301 URL;
- HTTP/301 – HTTP 响应状态代码 301 Moved Permanently用于永久 URL 重定向
- HTTP/302 – HTTP 响应状态代码 302 Found 是使用暂时移动代码执行 URL 重定向的常用方法。
此外,可以指定一个代码为 302 的临时重定向 URL 作为唯一参数。此类参数应以“http://”、“https://”或“$scheme”字符串开头。URL 可以包含变量。
结论
您学习了如何在使用 Nginx Web 服务器时使用 HTTP/301 重定向将端口 80 重定向到端口 443。有关更多信息,请参阅 nginx 文档。