Centos 7 下 Nginx 反向代理 https 配置

本贴最后更新于 2360 天前,其中的信息可能已经事过境迁

需求来源

  • 这个博客是一个 Java 开源博客 solo,内置 jetty,同时也可以容器部署,之前是部署在 Tomcat 容器里面的,今天看到腾讯云卖证书广告,突然想到 https 出来这么久,自己还没有尝试过,还可以借此机会学习一下如何部署 https 证书和 nginx 反向代理,之后做的一些网站可能都需要用的上。

技术选择

  • 因为 solo 可用内置端口也可以部署到容器里面,所以我们这里可以选择通过 Tomcat 配置证书,也可以使用 nginx 监听 80 端口,监听来自 www.qfql.me 域名的请求代理到本地 8080 端口,在 nginx 上通过监听 443 端口配置 https 证书。
  • 当然了,最后我们选择了后者,这样的话对以后服务器上的应用影响更小一点,未来无论我们有什么架构的 web 程序,都可以开不同的端口通过 nginx 代理过去,如果使用 Tomcat 容器的话就只能部署 Java 项目了。

部署安装

  • centos 7 下的 nginx 安装
    • nginx 官网下载压缩包到本地,不推荐 yum install 形式的安装,ubantu 14.04+ 下是会自带 ssl 模块的,centos 7 不知道会不会自带(我是之前 yum 装的,结果可以代理过去,https 死活无法访问,后来我又把原来的卸载了重新编译安装的)。
    • 如果你在你要安装的机器上可以执行下面命令
    • **wget [http://nginx.org/download/nginx-1.12.2.tar.gz](http://nginx.org/download/nginx-1.12.2.tar.gz)**
    • **yum install gcc-c++**
    • **yum install -y pcre pcre-devel**
    • **yum install -y zlib zlib-devel**
    • **yum install -y openssl openssl-devel**
    • 上面四个 install 如果本机没有的话要装上,nginx 依赖编译、正则、压缩、ssl 等,重点是 ssl,一定要装上,不然后面编译 ssl 模块的时候会报错。
    • 然后解压之前下载的 nginx 安装包,tar -zxvf nginx-1.12.2.tar.gz
    • 进入到目录中 cd nginx-1.12.2
    • 配置编译模块 ./configure --with-ipv6 --with-http_ssl_module
    • make
    • make install
    • 若果没报错的话就安装完成了,在启动 nginx 之前先去掉 nginx 配置文件第一行 user nobody 前面的注释,不然无法运行,我的配置文件路径在 /usr/local/nginx/conf/nginx.conf
    • 执行 /usr/local/nginx/sbin/nginx 就可以启动 nginx 了,访问这个机器的 80 端口就会看到 nginx 的欢迎页面了
  • https 证书配置
    • 先要申请一个免费证书,网上搜一搜就有了,我是在腾讯腾讯 https 证书申请申请的免费证书,备案过的域名很快就下来了,一个小时差不多就弄好了
    • 在申请下来的证书文件中你会拿到两个后缀名为 crt 和 key 的文件,把这两个文件上传到你的服务器上保存好
    • 然后编辑 nginx 的 nginx.conf 文件配置,在配置文件的 http 配置中添加如下两个 server,把对应的域名和证书地址提换成你的就可以了
server {
    listen       80;
    server_name  www.qfql.me;
    rewrite ^ https://$http_host$request_uri? permanent;    # force redirect http to https
    return 301 https://$http_host$request_uri;
}
server {
    listen       443 ssl;
    server_name  www.qfql.me;
    ssl_certificate      /Nginx/1_www.qfql.me_bundle.crt;
    ssl_certificate_key  /Nginx/2_www.qfql.me.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        proxy_pass  http://127.0.0.1:8080/;
    }   
}

修改完配置文件以后执行 nginx -t 测试配置文件是否正确,然后 nginx -s reload 生效,就可以愉快的使用 https 了

  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    69 引用 • 190 回帖 • 482 关注
  • HTTPS
    98 引用 • 271 回帖 • 3 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...