Too young, too simple. Sometimes, naive & stupid

Nginx实现HTTP强制跳转HTTPS

Info

安装NGINX的还没来得及整理到这个博客,以后再来补,今天主要写跳转的实现,安装通过yum,仅供测试,生产建议编译;

环境

Centos7
ssl
nginx

结果

浏览器 — 直接访问80 — 跳转https ,

安装nginx

不要在意为什么不编译

1
2
3
yum -y install epel*
yum -y install nginx
nginx -v # 检查是否安装成功

生成证书(仅供测试用)

1
2
3
4
5
6
7

mkdir -pv /usr/local/src/test
cd /usr/local/src/test/
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl rsa -in server.key -out server_nopwd.key # nginx使用的私钥需要去除密码口令
openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt

这时 test目录下应该有四个文件

mark

修改NGINX配置文件

现在我们修改一下nginx.conf 因为是测试所以修改全局文件了

1
vim /etc/nginx/nginx.conf

这里需要启用https的配置,

mark

现在我们启动服务测试下,

1
2
systemctl stop firewalld ; systemctl restart nginx
netstat -tunlp | grep 443

启动服务如果报错请看清log 并且Double Check 你的配置文件,主要是证书名字和路径
检查端口是否开启,
接下来 找一台可以跟server通信的客户端 打开https://ip 测试。
可以打开网页 并且是https 那么 https —-OK

http跳转

这里实现的方式有很多,

这里介绍几种

方式1 rewrite

mark

可以看出,这句话的意思是当你访问http时,通过uri重写的方式直接到https

1,2两种写法,都可以,选一个自己觉得好看的

但是,这是旧版本文档里的写法,

新版本的NGINX已经不推荐这种方式;

推荐方式为下面说的方法2

方法2 return

mark

这种方式也很清晰,访问http时 ,return一个301 直接跳转https,原理就是跟你打网页 没有这个页面 404的效果类似

mark

August 7, 2017 1:01 AM

END