最近学习研究nginx,通过修改其配置文件以及在编译时添加相关模块可以配置https服务器。
1.环境
Ubuntu 14.04 64bits
nginx version: nginx/1.0.15
2.编译安装
下载nginx源码并解压,运行configure
脚本,会有一些默认安装的HTTP模块,不过要配置https服务器,则需要使Nginx支持SSL协议,这就需要安装http ssl module
:
./configure --with-http_ssl_module
执行完成后直接make; sudo make install
,相关内容默认安装在/usr/local/nginx/
目录下。
3.生成自签名的证书
显然这里的证书不可能由权威证书颁发机构(CA)签名,因为申请一个证书签名的费用大概在一年几十到几百刀不等。
不过可以使用OpenSSL工具创建生成一个自签名的证书,步骤如下:
a) 进入想创建证书和私钥的目录,例如:
$ cd /usr/local/nginx/conf
b) 创建私钥(需要输入一个口令):
$ openssl genrsa -des3 -out server.key 1024
c) 创建签名请求:
$ openssl req -new -key server.key -out server.csr
d) 移除私钥口令(否则在服务器启动nginx时会要求输入口令):
$ cp server.key server.key.org # 先备份
$ openssl rsa -in server.key.org -out server.key # 移除口令
e) 用私钥签名证书
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
4.修改配置nginx配置文件
在nginx配置文件的http块配置项中找到嵌套的server配置项,在默认配置中,https的相关配置已经被注释掉了,打开注释,修改其配置让其包含新标记的证书和私钥。https默认端口号是443,可以通过listen
配置项修改监听的端口号
server {
listen 1025;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key.org;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
5.重启服务器并测试
重启nginx加载修改过的配置文件,在浏览器中访问,会出现证书不被信任的警告,效果参考12306,至于为什么12306要使用自签名的证书,参考为何从12306.cn订票时浏览器总是提醒证书不受信任?
6.参考
http://www.liaoxuefeng.com/article/0014189023237367e8d42829de24b6eaf893ca47df4fb5e000
https://www.centos.bz/2011/12/nginx-ssl-https-support/