SakuraDon

CentOS7安装nginx 代理Spring boot 使用Certbot配置免费ssl
以前我是apache忠实拥护者,无奈nginx是真的香啊CentOS7 安装 nginx添加nginx源到yum里...
扫描右侧二维码阅读全文
19
2019/09

CentOS7安装nginx 代理Spring boot 使用Certbot配置免费ssl

以前我是apache忠实拥护者,无奈nginx是真的香啊

CentOS7 安装 nginx

添加nginx源到yum

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装nginx

yum install -y nginx

启动nginx并设置开机启动

systemctl start nginx
systemctl enable nginx

使用systemctl status nginx查看运行状态

代理Spring boot

nginx默认的配置文件在/etc/nginx/conf.d下,在此文件夹下创建一个新的.conf文件,名字随意。

填写如下配置

server {
        listen       80 default_server;
        server_name  api.domain.com; # 你的域名

        location / { 
                proxy_pass http://localhost:8080; # spring boot 项目监听的地址
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        error_page 404 /404.html;
            location = /40x.html {
        }
}

以上配置会把所有访问http://api.domain.com/的内容代理到http://localhost:8080下。

使用Certbot配置免费ssl

安装

CertbotLet's Encrypt就不多介绍了,用就完事了。
官网传送门

先开启optional channel

yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

然后安装脚本

sudo yum install certbot python2-certbot-nginx

报错

如果你是阿里云的机器,你将有幸获得如下报错
QQ截图20190919211231.png

当你尝试启动脚本

sudo certbot --nginx

报错信息

Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.37.2', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 564, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2662, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2316, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2322, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 17, in <module>
    from certbot import account
  File "/usr/lib/python2.7/site-packages/certbot/account.py", line 17, in <module>
    from acme import messages
  File "/usr/lib/python2.7/site-packages/acme/messages.py", line 11, in <module>
    from acme import challenges
  File "/usr/lib/python2.7/site-packages/acme/challenges.py", line 12, in <module>
    import requests
  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 58, in <module>
    from . import utils
  File "/usr/lib/python2.7/site-packages/requests/utils.py", line 32, in <module>
    from .exceptions import InvalidURL
  File "/usr/lib/python2.7/site-packages/requests/exceptions.py", line 10, in <module>
    from .packages.urllib3.exceptions import HTTPError as BaseHTTPError
  File "/usr/lib/python2.7/site-packages/requests/packages/__init__.py", line 95, in load_module
    raise ImportError("No module named '%s'" % (name,))
ImportError: No module named 'requests.packages.urllib3'

又是urllib3这个包的问题,这个问题我在Centos7+Apache+certbot部署https这篇文章里有讲到过。跟着这篇文章做99%能解决问题。

总结一下解决方法,卸载urllib3再安装urllib31.22版本。

pip uninstall urllib3
pip install urllib3==1.22

如果再次启动脚本仍报错且提示

ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

执行下面命令可解决问题

pip install --upgrade --force-reinstall 'requests==2.6.0'

安装成功后启动脚本,跟着提示一路选择就大功告成了,已有相关的的nginx配置文件也会被脚本修改为自动跳转https

Let's Encrypt的证书只持续90天,如果你需要自动续订的话,使用以下命令,将添加定时任务自动续订

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null

之后就不用担心证书过期的问题了。

有一点要注意的是选择域名的地方,如果一次选择多个域名或子域名,那么这几个域名会共用一个证书。如果使用期间有子域名被从DNS解析中删除了,那么将会导致证书无法续期,只能重新生成新证书。

最終更新:2019 年 09 月 20 日 01 : 13 AM
あなたが私の記事があなたにとって有用であると感じるならば、それを感謝してください。