ubuntu中安装nginx并配置SSL
安装
ubuntu中安装软件的方式比较快捷,特别是对于我这种菜鸟来说apt-get简直就是神器,安装nginx只需要执行:sudo apt-get install nginx
,然后就会自动的安装好该软件。
安装好后nginx的安装目录在:/etc/nginx下,nginx的默认访问静态资源路径是:/var/www/html。ubuntu中自动安装的nginx的配置文件是适用include的方式从sites-enabled下引入的,所以要修改nginx的配置文件需要去该目录下添加或修改配置文件。暂时先不管这个了,安装好就可以用,作为小菜的我也不知道其他需要配置些什么,只能走一步算一步了。今天的主要目的是配置nginx为ssl的代理服务器,所以还是快点配置证书什么的吧。
证书转换
由于我以前是在tomcat上配置的ssl,而且配的是jks(java key store)文件。查了很多资料都没有看到可以在nginx上配置jks的,想了一下,jks是依赖java的,nginx不支持也是正常的。看了那些资料上配置的都是.key文件和.crt文件,就查了一下jks文件到处.crt的方法。黄天不负苦心人,让我在内存.溢出上找到了一篇博文,根据这篇博文我进行了相关操作:
jks证书文件转换为pkcs12文件
keytool -importkeystore -srckeystore leo.meteors.cc.jks -destkeystore leo.meteors.cc.p12 -scrstoretype jks -deststoretype pkcs12 -deststorepass 123456
命令执行过程中需要先输入原jks的密码,然后输入p12的密码(123456),如果不需要修改密码,在上述命令中可以去掉-deststorepass这个参数,那么后面输入p12的密码就需要与jks的密码一致。
pkcs12导出pem
据说这个pem可以配置到nginx中,但是我暂时没有找到配置方法,这里记下导出方式方便我以后学会了配置方法时使用。
从pkcs12导出pem需要用到openssl工具,命令如下:
- 导出加密的pem
openssl pkcs12 -in leo.meteors.cc.p12 -out leo.meteors.cc.pem
- 导出非加密的pem
openssl pkcs12 -nodes -in leo.meteors.cc.p12 -out leo.meteors.cc.pem
分别导出key和crt
这种导出方式是我当前用到的,因为所查询到的资料都是配置key和crt的。
- 导出key
# 加密key
openssl pkcs12 -in leo.meteors.cc.p12 -nocerts -out leo.meteors.cc.key
# 非加密key(未使用)
openssl pkcs12 -in leo.meteors.cc.p12 -nocerts -nodes leo.meteors.cc.key
- 导出证书
openssl pkcs12 -in leo.meteors.cc.p12 -nokeys -clcerts -out leo.meteors.cc.crt
- 导出CA证书(不知道用来干啥)
openssl pkcs12 -in leo.meteors.cc.p12 -nokeys -cacerts -out leo.meteors.cc.ca.crt
现在需要的文件都拿到了,可以开始配合SSL了
配置nginx的ssl
我选择的是修改sites-enabled的default文件,在修改前先备份该文件:
cd /etc/nginx/sites-enabled/
# 在/etc/nginx/nginx.conf中使用是导入/sites-enabled文件夹下的所有文件
# 所以我需要将该文件备份到其他的目录
cp defaut /home/lethew/bak
# 编辑该文件
sudo vi default
执行完上述命令后,终端将打开该文件的vi编辑页面,在该文件中编辑:
server{
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name leo.meteors.cc;
location / {
prox_pass http://localhost:9080;
}
ssl on;
ssl_certificate /home/lethew/cert/leo.meteors.cc.crt;
ssl_certificate_key /home/lethew/cert/leo.meteors.cc.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
}
然后退出viESC :wq
平滑重启nginx
很多时候我们需要更新正在运行的nginx,由于nginx代理的站点可能非常的多,一旦停止将造成不可估量的影响,所以需要在不影响其他站点的情况下更新nginx。nginx也是支持平滑重启服务方法,命令如下:
# 语法检查
nginx -t
# 重新加载资源
nginx -s reload
总结
这次nginx的配置虽然完成的工作简单,但作为首次这么近距离的接触nginx能完成这么多工作还是很有成就感的。另外也知道使用jks到处nginx可用的证书文件方式,接触到了openssl这些整天听说却没有接触的技术。但由于对nginx的反向代理原理和配置不是太了解,在完成这些工作后想凭自己的理解去配置一下代理第二个和第三个站点的时候导致了404错误,现在正在努力的学习nginx的官方文档已解决这个问题。哈哈,到底我还是太年轻啊……