Centos 7 下 Nginx反向代理https配置

需求来源

  • 一个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了

你可能感兴趣的:(nginx,https)