前言
一个常见的任务是将任何HTTP请求重定向到HTTPS,因此我们的应用程序和站点总是使用SSL证书。
在Nginx中,我们通常希望避免使用if语句。类似于我们如何在www和非www子域之间重定向,我们将使用服务器块将HTTP重定向到HTTPS请求
重定向所有HTTP
捕获所有端口80 (http)请求,并将它们重定向到端口443 (https)
nginx配置
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
- 它监听端口80。它也是端口80的默认服务器。假设它是侦听端口80的唯一服务器块。
- server_name是_,它与所使用的任何主机名匹配。
- 301重定向到后台
重定向到指定的网站或者后台
我们也可以只重定向特定的网站。如果你有多个应用程序/站点,并且不是所有的应用程序/站点都应该强制使用SSL证书,那么这样做会更好。
nginx配置
server {
listen 80;
server_name foo.com;
return 301 https://foo.com$request_uri;
}
- 这里我们在端口80上侦听http请求,但我们没有将其设置为默认服务器。相反,它只监听对主机名foo.com发出的请求(其中主机HTTP头被设置为foo.com)。
- 它返回一个301重定向到给定URI的https版本,主机名(foo.com)。
应用配置
我们的站点/应用程序可以设置为仅侦听端口443的SSL连接。
nginx配置
server {
listen 443 ssl default_server;
server_name foo.com;
}
server {
listen 443 ssl;
server_name bar.com;
}
# and so on...
至此所有的http请求都会分流到foo.com这个后台的https.