编译https模块
刚才给网站配置了SSL证书,在阿里云平台上免费获得的SSL证书,因为使用的是Nginx,下载后得到了两个文件,*.pem
和*.key
,然后进行了一通配置,配置遇到了很多问题在这里记录一下。
如果Nginx在编译的时候没有加入https模块,需要重新进行编译:
# 重新进行编译设置
./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 编译安装
make && make install
这样Nginx就支持https协议了
配置https协议
然后再配置文件中配置以下内容:
server {
listen 443 ssl;
server_name localhost;
root html;
index index.html index.htm;
ssl_certificate cert/a.pem;
ssl_certificate_key cert/a.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
把其中的server_name
和ssl
证书的文件地址改一下即可,location
看情况也要改一下
如果想要同时支持http和https可以类似于下面的配置:
server {
listen 80;
listen 443 ssl;
# ...
}
配置好https
后,网站默认是不会使用https
的,这个时候需要强制转为https
默认使用https访问网站
有一个响应头可以做到这个事情,配置如下:
server {
listen 80;
listen 443 ssl;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# ...
}
这样网站默认访问就是https
了
还有一种方法,但是不能使用上面的server
块了,需要将80
端口和443
端口的server
块分开
然后在80
的server
块中配置如下内容:
server {
listen 80;
server_name localhost;
# 重定向到https站点
return 301 https://$server_name$request_uri;
}
这种方式是强制重定向的方式,但是感觉这种方式就是Nginx官方的文章说的那种错误的使用方式