三、HTTPS支持:1:申请Letsencrytp证书(acme)
三、HTTPS支持:2:配置Nginx支持HTTPS
一、HTTP环境:Nginx安装
VPS性能不足,这里选择安装Nginx,且只安装最基本的(http/https),不支持PHP等……
安装
#!python
yum install epel-release
yum update
yum -y install nginx
启动
#!python
systemctl enable nginx
systemctl start nginx
systemctl status nginx
防火墙设置
如果有启用防火墙,则还要设置下防火墙
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
firewall-cmd --list-all
这样,一个最基本的HTTP服务器就起来了……
输入服务器IP就能显示WEB页面。
配置虚拟主机
编辑vim /etc/nginx/nginx.conf
找到
include /etc/nginx/default.d/*.conf;
在下面添加
include /etc/nginx/vhost/*.conf;
创建对应目录,存放虚拟主机配置文档
mkdir /etc/nginx/vhost
创建想要的虚拟主机文档
cd /etc/nginx/vhost
vim test.cn.conf
添加test.cn.conf内容,#假定,已有域名test.cn
#!python
server {
server_name a.test.cn; #设置虚拟主机名
location / {
root /webroot; #设置你的虚拟主机目录
index index.html index.htm;
}
}
这样一个最简单的虚拟主机就起来了。
在浏览器地址栏中输入虚拟主机的域名a.test.cn就能访问了。
三、HTTPS支持: 一)申请Letsencrypt证书(acme)
参考:https://github.com/Neilpang/acme.sh/
https://github.com/Neilpang/acme.sh/wiki/dnsapi
准备工作
通过阿里DNS api申请证书,所以还要获得阿里的AccessKey ID和Access Key Secret
点击https://ak-console.aliyun.com/#/accesskey,登录阿里通行证,就能获取。
安装acme.sh
curl https://get.acme.sh | sh
默认安装在~/.acme.sh目录下,为了方便,使用root安装。
输入之前准备好的阿里的AccessKey ID和Access Key Secret:
在控制台输入如下命令:
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
这两条命令会保存在~/.acme.sh/account.conf文件里。
申请证书
下面可以申请证书了。我们申请一个泛域名证书,方便后续开新的虚拟主机(假定顶级域名为test.cn):
acme.sh --issue --dns dns_ali -d test.cn -d *.test.cn
过会,证书就申请下来了,默认存放在~/.acme.sh/test.cn/目录下。
安装证书
我们vps用的是Nginx,所以,我们把证书放到/etc/nginx/ssl目录之下。
首先创建这个目录:
mkdir /etc/nginx/ssl
然后安装证书:
acme.sh --installcert -d test.cn \
--key-file /etc/nginx/ssl/test.cn.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "systemctl restart nginx"
这样,test.cn域名的证书就申请完成了。目前证书在60天以后会自动更新,无需几何操作。
更新acme.sh
手动升级到最新版
acme.sh --upgrade
或者让它自动升级:
acme.sh --upgrade --auto-upgrade
不想自动更新了,可以关闭它:
acme.sh --upgrade --auto-upgrade 0
三:HTTPS支持:二)配置Nginx支持HTTPS 准备工作
生成dhparam.pem:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
配置Nginx
接着上次,继续编辑虚拟主机test.cn.conf文件,在后面添上HTTPS支持:
#!python
server {
server_name a.test.cn; #设置虚拟主机名
location / {
root /webroot; #设置你的虚拟主机目录
index index.html index.htm;
}
#######在最后个"}"之前加入
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/nginx/ssl/fullchain.cer; # managed by Certbot
ssl_certificate_key /etc/nginx/ssl/test.cn.key; # managed by Certbot
include /etc/nginx/conf.d/ssl.conf; # managed by Certbot
ssl_dhparam /etc/nginx/ssl/dhparam.pem; # managed by Certbot
add_header Strict-Transport-Security "max-age=31536000";
}
如果要强制HTTPS访问,则在虚拟主机配置文件中再加段Server{}进去,如下:
#!python
server {
if ($host = a.test.cn) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name a.test.cn;
return 404; # managed by Certbot
}
添加/etc/nginx/conf.d/ssl.conf文件
内容如下:
#!python
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
启动Gzip支持(可选)
如果想让Nginx支持Gzip压缩网页,还能添加gzip.conf文件到/etc/nginx/conf.d目录下,内容如下:
#!python
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
每次对服务进行了更改,都要记得重启下服务,使得更改生效:
systemctl restart nginx
systemctl status nginx
代理设置
#!python
server{
listen 80;
server_name your_domainname;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
server_name your_domainname;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
root /etc/nginx/html/;
index index.html;
location / {
root /;
index index.html;
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}