##搭建nginx服务与并支持域名绑定与https
###一、安装nginx
1.登录http://nginx.org/官网
根据下面的图片引导找到Pre-Built Packages for Stable version
2.按照官网的说明进行安装
Pre-Built Packages for Stable version
To set up the yum repository for RHEL/CentOS, create the file named /etc/yum.repos.d/nginx.repo
with the following contents:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
Replace “OS
” with “rhel
” or “centos
”, depending on the distribution used, and “OSRELEASE
” with “6
” or “7
”, for 6.x or 7.x versions, respectively.
首先创建文件vi /etc/yum.repos.d/nginx.repo
将contents复制进nginx.repo文件中,并安装要求进行修改
安装nginx执行 yum install nginx 即可安装完成!
二、配置域名
1.vi /etc/nginx/conf.d/default.conf
server {
listen 80;
listen 443 ssl;
server_name www.bzlhn.xyz bzlhn.xyz; //修改为自己的域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; //静态页面存放的位置,可以将本目录下的文件替换成自己的html页面
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
2.启动systemctl start nginx
可以看到页面了
三、设置https
1.一个免费的https网站https://letsencrypt.org/
2.找到安装方法
3.在安装之前首先检查自己的nginx是否监听了443端口,如果没有加上。
listen 443 ssl;
reload一下nginx
systemctl reload nginx
4.安装epel-release 执行命令
sudo yum install epel-release
5.安装certbot-nginx执行命令
sudo yum install certbot-nginx
按照提示选择
Is this ok [y/d/N]: y
6.执行命令
sudo certbot --nginx
提示你输入邮箱:
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel): onlyone_lihainan@163.com
后面的就是按照提示进行选择就可以了
7.重新加载
systemctl reload nginx
8.测试成功
四、请求转发
我们可能需要nginx进行请求的转发,比如当前台请求我们的服务器时,请求会先到达nginx再由nginx进行转发到相应的服务端口上。
转发到外网地址
location /{
proxy_pass http://58.56.27.186:3667;
}
转发到本机地址下的一个服务
root /www/take-out-java; //项目路径
location / {
proxy_pass http://127.0.0.1:3667; //要转发到的地址
}
设置自动更新https证书
# 打开定时任务编辑
crontab -e
# https证书auto-renew
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
# 查看任务是否成功
crontab -l
# 查看相关日志
tail -f /var/log/cron -n 1000
手动更新证书有效期
certbot renew
遇到过的两个证书生成出现的问题:
1.python的模块版本的问题
报错提示:
ImportError: No module named 'requests.packages.urllib3'
运行以下命令后,成功解决
pip install requests urllib3 pyOpenSSL --force --upgrade
pip install --upgrade --force-reinstall 'requests==2.6.0'
2.openssl版本过低问题
报错提示:
raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
解决:
装高版本pyOpenSSL即可
pip install 'idna<2.7,>=2.5'
pip install 'urllib3<1.23,>=1.21.1'
crontab 定时任务
执行crontab -e即可编辑定时任务,在编辑中输入下面命令即可 15 3 * */2 * certbot renew
这段定时命令为每隔两月凌晨 3:15执行命令