写在前面的话
关于nginx和jetty之间的事儿是三少奶奶写的一个系列,每个系列环环相扣,所以强烈建议读者从第一话开始食用,希望能对你有所帮助
本文介绍了,当用户以http的方式请求服务器时,nginx如何强制跳转到https进行访问,若读者不了解如何为nginx安装https证书的话,可以看我写的这一系列博文,
小白:一文让你了解nginx和jetty之间的私事儿(一)------ 如何为nginx配置https证书
通过阅读前一篇博文,我们会得到一个nginx的配置文件代码,但该代码并不完整,下面我们将逐步完善
步骤一:为nginx.conf文件添加一下代码,你只需要修改server_name即可
server {
listen 80;
server_name www.demo.xyz; #已经备案的域名
rewrite ^ https://$http_host$request_uri? permanent;
}
解释:客户端发送http请求时都是请求的80端口,所以,我们在nginx.conf文件中再添加一个server模块,让它去监听80端口,并rewrite到 上述代码中的地址。
后话:网上主要有三种方式实现nginx强制把http跳转到https,上述方式是三少奶奶使用的,亲测有效
下面给出添加后的代码
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server {
listen 80;
server_name www.demo.xyz; #备案域名
rewrite ^ https://$http_host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name www.demo.xyz; #备案域名
keepalive_timeout 70;
ssl_certificate 1_www.demo.xyz_bundle.crt; #申请的域名证书
ssl_certificate_key 2_www.demo.xyz.key; #申请的域名证书
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
}
}