阿里云官方给了个教程,但是按步骤一步步做下来,冒出来的“坑”比较多,折腾了2个小时把坑填上,记录一下用作备忘。阿里云官方给出的教程:CentOS 7.4 实例配置 Nginx + HTTPS 服务
0. 预备知识
假设读者已经对ECS的安全组添加了443端口可访问。
安装时,可能需要以ECS实例的root用户登录或者sudo。可以使用su命令进行用户切换。
1. 预安装
按照一般流程,首先需要安装PCRE和zlib的第三方库。
PCRE是一系列实现了正则表达式模式匹配的函数集,参照了Perl的语法和语义。
zlib是一种无损数据压缩格式,zlib-devel是一个开源库,包含一些头文件和实现(我猜可能是C写的吧,没有仔细查),可用于开发一些使用zlib格式的程序。
yum -y **install** pcre pcre-devel
yum -y **install** zlib-devel
2. 切换目录
可根据自己需要切换到合适的目录下,通常建议在非admin的普通用户目录下。
cd /usr/local/
该目录将作为我们下载nginx及OpenSSL源码压缩包并解压的根目录。
3. 下载OpenSSL及Nginx源码压缩包
OpenSSL用于生成服务器端的密钥证书。
wget [https://www.openssl.org/source/openssl-1.1.0g.tar.gz](https://www.openssl.org/source/openssl-1.1.0g.tar.gz)
tar -xvzf openssl-1.1.0g.tar.gz
Nginx源码压缩包下载。注:阿里云官网教程给出的Nginx版本在编译时出现某条deprecated
日志,初步判断是版本问题,于是重新在Nginx官网上随便找了一个看样子later and more stable的版本。-_-!
wget [http://nginx.org/download/nginx-1.13.9.tar.gz](http://nginx.org/download/nginx-1.13.9.tar.gz)
tar -xvf nginx-1.13.9.tar.gz
4. 编译
cd nginx-1.13.9 # 注意:这里是切换到Nginx解压后的文件目录下
# 调用目录下configure脚本命令
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.0g
make && make install
注:—prefix=/usr/local/nginx
参数值将在make成功后生成为Nginx程序的文件目录。
本例中,命令编译成功后,将会在/usr/local/
下新增nginx
文件夹,nginx程序即在该目录下。
5. 生成证书和密钥
cd /usr/local/nginx/conf #配置文件目录
openssl req -new -x509 -nodes -out server.crt -keyout server.key #按下回车后,按照提示输入信息,生成server.crt和server.key文件,将用于配置nginx监听443端口
官方教程中的一个问题就是证书和密钥的路径存放位置。应该与后面将要介绍的nginx.conf
配置文件同一目录下。
6. 更改Nginx的SSL配置
打开nginx配置文件nginx.conf
。
vi /usr/local/nginx/conf/nginx.conf
取消server
条目下的注释,并更新证书和密钥文件名(参照step 5生成的文件名,当然,你也可以按照配置文件中默认文件名重复step 5,这会儿说是不是有点晚?😄),如下图所示。
注:当然,你也可以顺手把配置文件里代理80端口的那部分代码注释掉,不过只要ECS安全组没有打开80端口访问权限,用户也是无法从80端口访问到Nginx及后面的服务的。
7. 启动Nginx
/usr/local/nginx/sbin/nginx
注:虽然这样启动有点丑,但平时毕竟用的比较少,所以就将就着这么用吧。
8. 检查网络端口监听
netstat -ntpl
显示结果如下:
9. 通过HTTPS访问ECS的公网IP
掏出你的ECS公网IP,加上https://
前缀。如果顺利的话,应该能看到下图所示。
注:暂时不用关心浏览器提示的
unsecure link
提示。
10. 重新加载nginx配置
在重新加载新的Nginx配置前,建议不要直接restart,有必要先判断下更改后的配置是否能够运行正常:
cd usr/local/nginx/sbin/
./nginx -t -c /usr/loal/nginx/conf/nginx.conf
如果正常,将返回:
确认无误后,重新加载:
/usr/nginx/sbin/nginx -s reload
不到之处,欢迎指正。
EOF