一、HTTP环境:Nginx

二、Blog端:pelican

三、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
 }

或申请HSTS preload list

添加/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;
    }
}

Related content