我有以下服务器块:
server {
listen 192.0.2.1:443 ssl;
listen 192.0.2.1:80;
server_name support.example.com;
ssl_certificate /etc/ssl/certs/support.example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/private/support.example.com/privkey.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
add_header Content-Security-Policy "frame-ancestors 'self' cloud.example.com example.com";
access_log /var/log/nginx/support.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://support.example.com;
proxy_read_timeout 90;
}
location ~ .well-known {
root /srv/web;
}
}
我希望除了location ~ .well-known
重定向到 https 之外的每个请求,我尝试使用重定向指令,但没有成功。我希望每次客户端请求非 http 请求时都重定向到https://support.example.com。
笔记:我想避免为非 http 请求创建新的虚拟服务器。
答案1
下面的服务器块将捕获对 support.example.com 的 http 请求并重定向到 https。
笔记:修改配置文件之前总是进行备份。如果出现问题,您可以更轻松地回滚。
server {
listen 192.168.0.100:80;
server_name support.example.com
return 301 https://support.example.com$request_uri;
}
下面将捕获从 www.support.example.com 到 https support.example.com 的 http 和 https 请求。虽然在使用子域(如您的示例)时这并不重要,但当您希望将 www.example.com 定向到 example.com 时它很有用。我在这里只包括它,因为它可能对您或其他人有用。
server {
listen 192.168.0.100:80;
listen 192.168.0.100:443 ssl;
server_name www.example.com;
# SSL Certs stuff for www.example.com goes here
return 301 https://example.com$request_uri;
}
一旦您捕获了所有请求,您就可以按照通常的方式进行处理。
server {
listen 192.168.0.100:443 ssl;
server_name example.com;
# SSL Stuff and other requirements go here
}
以上三项都可以放入 /etc/nginx/sites-available/example.com.conf
进行更改后,Nginx 可以使用以下命令检查您的修改。
sudo nginx -t
You should get the following output;
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
您可以使用以下方式重新加载 Nginx-s 重新加载
sudo nginx -s reload
我希望这就是你所寻找的。