kaywang 发表于 2019-2-15 17:00:37

Centos7 配置Nginx实现HTTPS

Nginx简介
  Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
实验环境:
  系统版本:centos7x3.10.0-514.el7.x86_64
  Nginx版本:nginx1.14.0
  关闭防火墙并禁止开机自启
  systemctl stop firewalld.service
systemctl disable firewalld
  关闭selinux
  sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  修改主机名
  vi/etc/hostname
  nginx.wangfeiyu.com
  域名绑定IP
  vi /etc/hosts
http://i2.运维网.com/images/blog/201810/10/0120666d6462e5012712f233dc39d45b.png
  重启 reboot
安装nginx服务
1、安装nginx依赖环境包
  yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、官网下载nginx1.14.0压缩包
  wget https://nginx.org/download/nginx-1.14.0.tar.gz
3、解压nginx
  tar zxf nginx-1.14.0.tar.gz
4、进入解压目录
  cd nginx-1.14.0
5、编译nginx
1)默认编译方式
  . /configure
2)自定义编译选项
  . /configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
--with-http_ssl_module
注:以上为默认编译方式和具体指定的编译方式,任选以上这两种之一即可。--with-http_ssl_module这个选项是https的重要模块必须安装。
3)本文中使用的编译安装方式
  ./configure
--prefix=/usr/local/nginx
--with-http_stub_status_module
--with-http_ssl_module
http://i2.运维网.com/images/blog/201810/10/c2221b62246ce3105b989bbd068edad7.png
注:以上--with-http_ssl_module这个模块是https的关键,必须安装!
6、安装nginx
  make && make install
7、启动nginx
方式一
1)启动nginx
  /usr/local/nginx/sbin/nginx
http://i2.运维网.com/images/blog/201810/10/de79d51405ee6f4d1f5d164cc839c336.png
2)关闭nginx
  /usr/local/nginx/sbin/nginx -s stop
3)重启nginx
  /usr/local/nginx/sbin/nginx -s reload
注:如果嫌以上方式太麻烦,可以做软连接ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx或者在全局环境变量里增加nginx环境变量,然后直接使用nginx即可!
方式二
1)编辑nginx服务启动文件
  vi/etc/init.d/nginx
  #! /bin/bash
#chkconfig: - 85 15
PATH=/usr/local/nginx
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/conf/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -e "\033[32m nginx already running \033[0m"
}
do_stop() {
$DAEMON -s stop || echo -e "\033[31m nginx not running \033[0m"
}
do_reload() {
$DAEMON -s reload || echo -e "\033[31m nginx can't reload \033[0m"
}
case "$1" in
start)
echo -e "\033[32m $NAME running \033[0m"
do_start
;;
stop)
echo -e "\033[31m $NAME stoping \033[0m"
do_stop
;;
reload|graceful)
echo -e "\033[32m $NAME configuration...\033[0m"
do_reload
;;
restart)
echo -e "\033[32m Restarting : $NAME \033[0m"
do_stop
do_start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
  注:切记编辑完启动脚本以后一定要给予执行权限,不然启动无效!
2)设置启动文件执行权限
  chmod+x /etc/init.d/nginx
3)启动nginx
  //设置开机自启
  chkconfig nginx on
  //启动nginx
  /etc/init.d/nginx start
  //重启nginx
  /etc/init.d/nginx restart
  //查看nginx服务启动状态
  chkconfig--list
  //查看nginx服务是否开启
  netstat -antupl | grep nginx
8、开机启动nginx
1)编辑开机启动文件
  vi /etc/rc.local
  添加一行/usr/local/nginx/sbin/nginx
2)设置启动文件权限
  chmod 755 /etc/rc.local
  注:如果使用方式二脚本启动服务,那么以上启动方式可以省略!
9、访问测试
  访问地址:http://192.168.152.77
http://i2.运维网.com/images/blog/201810/10/6cc4d7309ad1b76bfb3a7b3272e3fc6d.png
升级nginx为https条件
1、查看nginx是否支持ssl
  /usr/local/nginx/sbin/nginx-V
http://i2.运维网.com/images/blog/201810/10/c362e6333bd29d6a4768b4433a8f3624.png
注:查看 configure arguments 信息中是否包含 -with-http_ssl_module 字样,如果没有则需要重新编译。找到之前安装 Nginx 时的编译目录,配置ssl模块,因为这次是升级nginx,所以不需要执行 make install,执行命令如下:
. /configure--with-http_ssl_module
make
2、查看openssl配置文件
  vi/etc/pki/tls/openssl.cnf
http://i2.运维网.com/images/blog/201810/10/9546c167a976f1a5d7d9f4784fb0b8c2.png
注:以上截图默认就是这样的重要参数配置路径,如果你要配置修改路径,那么切记在后边签证书等等的操作都要按照这个配置路径去创建,不然当认证的时候会找不到证书!
3、创建生成证书需要的文件
1)创建证书索引数据库文件
  touch /etc/pki/CA/index.txt
2) 指定第一个颁发证书的序列号
  echo 01 > /etc/pki/CA/serial
  注:必须是两位十六进制数,99之后是9A!
4、CA自签证书
1)生成CA私钥
  cd/etc/pki/CA
  umask 066
  openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
http://i2.运维网.com/images/blog/201810/10/05ced960521b9da44ef8f4a14b1ffaf1.png
注:进入到/etc/pki/CA/目录下执行这两条命令!
2) 生成CA自签名证书
  openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
http://i2.运维网.com/images/blog/201810/10/ad9a0e76b524858a3da749c0a9b3da0d.png
注释:
-new: 生成新证书签署请求
-x509: 专用于 CA 生成自签证书
-key: 生成请求时用到的私钥文件
-days n:证书的有效期限
-out: 证书的保存路径
提示输入国家,省,市,公司名称,部门名称,CA主机名(颁发者名称)
4)查看生成的自签名证书
  //linux系统下查看
  openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
  //windows系统下查看
  需要更改上述文件名后缀为.cer即可查看
5、颁发证书
1)在当前创建/root/key/目录
  mkdir key
2)生成web服务器私钥
  cd key/
  umask 066
  openssl genrsa -out key/service.key 2048
http://i2.运维网.com/images/blog/201810/10/fec56cd47895a0b53007060e8653c3d5.png
3) 生成CA证书申请文件
  openssl req -new -key service.key -out service.csr
http://i2.运维网.com/images/blog/201810/10/55c47c2a1d56e135271837248a7103c3.png
注:同样提示输入国家、省、市、公司等信息。切记:国家,省,公司名称三项必须和CA一致。主机名称必须和网站域名相同,如www.centos73.com。或者使用泛域名,即*.centos73.com,匹配所有。
4) 将证书文件移动到CA服务器/etc/pki/CA/csr目录下
  mv service.csr /etc/pki/CA/csr/
http://i2.运维网.com/images/blog/201810/10/3570e9cda149eac98f483baa91cf92e5.png
注:默认好像是没有这个csr目录,那么就手动创建一个!
5) CA签署证书,并将证书颁发给请求者
  openssl ca -in /etc/pki/CA/crl/service.csr -out /etc/pki/CA/certs/service.crt -days 365
http://i2.运维网.com/images/blog/201810/10/ce01b05f52dc84277304518565907f31.png
6)查看证书中的信息
  //查看自签证书
  openssl x509 -in 绝对路径 -noout –text | issuer | subject | serial | dates
http://i2.运维网.com/images/blog/201810/10/4c8832b86b89f73b0a7e55bee98669ee.png
http://i2.运维网.com/images/blog/201810/10/8e2988c78060e5140b21105db07a3f24.png
  //查看颁发证书的序列号
  cat /etc/pki/CA/serial
http://i2.运维网.com/images/blog/201810/10/6d246bae17b6b8072cafc77da0a773f9.png
  //查看指定编号的证书状态
  openssl ca -status 1
http://i2.运维网.com/images/blog/201810/10/76e019c3842687965d9a206932aaf125.png
注:这个编号是颁发的第几个证书,当前就一个所以是1!
  //查看证书详细信息
  cat /etc/pki/CA/index.txt
http://i2.运维网.com/images/blog/201810/10/64213a6e42ef80deb24396b1b3df3a77.png
注:开头V表示当前证书的状态正常!
  //查看subjects信息
http://i2.运维网.com/images/blog/201810/10/a3b20f572def2b699824685d040abdb8.png
注:yes表示subjects信息必须是唯一的,不能重复申请!
6、修改nginx配置文件
  vi /usr/local/nginx/conf/nginx.conf
http://i2.运维网.com/images/blog/201810/10/0c442866a2b566d4c3d7c14c743b9ad8.png
注:这里有一个坑就是默认的HTTPS SERVER这行必须删除,要不然一直报错!
7、重启nginx服务
  /etc/init.d/nginx restart
8、测试(建议使用Firefox浏览器测试)
访问网页测试
1)域名访问地址:https://nginx.wangfeiyu.com/
http://i2.运维网.com/images/blog/201810/10/9e07fdef6ccce9d2f43853950b065c1e.png
注:以上截图访问方式使用的是https加密访问但是需要我们将证书导入浏览器才行!
导入方式:
  //点击高级
http://i2.运维网.com/images/blog/201810/10/e84ffd1a4722fe5cc0367bb0f2fb18d8.png
  //点击添加列外
http://i2.运维网.com/images/blog/201810/10/1d3f4984f896c51f38a0e6991c98522d.png
  //点击确认安全列外
http://i2.运维网.com/images/blog/201810/10/fbce1ec3c5269a7cbeeecb7f8663587e.png
http://i2.运维网.com/images/blog/201810/10/e3e24ab6c36d3800eb0a639d41390f82.png
注:以上截图已经可以访问到网页,说明nginx加密成功或者证书导入成功!其他的浏览器导入证书方式不一样,但是超级简单,自行百度即可!
2)IP访问地址:http://192.168.152.177/
http://i2.运维网.com/images/blog/201810/10/097c40f1947cdde0e0bd6d101873f1ee.png
注:这种方式默认使用的还是http协议!也可以设置为通过http跳转到https!
3)IP地址https访问:https://192.168.152.177/
http://i2.运维网.com/images/blog/201810/10/3e51f2ab419f819aa893dc9837a57c21.png
注:以上截图访问方式使用的是https加密访问但是需要我们将证书导入浏览器才行!导入方式以上面方式相同。
  参考文章:https://www.cnblogs.com/mingzhang/p/8949541.html



页: [1]
查看完整版本: Centos7 配置Nginx实现HTTPS