Gunicorn 应该装在你的 virtualenv 环境下,假定虚拟环境为orion,安装前激活 orion:
pip install gunicorn
启动Gunicorn:
xxxxxxxxxx
gunicorn -w 6 -t 120 -k gevent -b 0.0.0.0:8000 wsgi:app
执行如下命令安装Nginx:
xxxxxxxxxx
sudo apt-get install nginx
使用如下命令查看安装后的nginx版本号:
xxxxxxxxxx
nginx -v
输出如下:
xxxxxxxxxx
nginx version: nginx/1.18.0 (Ubuntu)
创建证书存放目录
xxxxxxxxxx
sudo mkdir /etc/nginx/cert
将证书文件qhdmtz.com_bundle.crt和密钥文件qhdmtz.com.key上传到上述目录。
创建指向SSL密钥和证书的配置代码段
首先,让我们在/etc/nginx/snippets目录中创建一个新的Nginx配置代码段。 为了正确区分此文件的目的,我们将其命名为:
xxxxxxxxxx
sudo vim /etc/nginx/snippets/ssl-qhdmtz.com.conf
在这个文件中,我们只需要将ssl_certificate设置为我们的证书文件和ssl_certificate_key相关的密钥。
xxxxxxxxxx
ssl_certificate /etc/nginx/cert/qhdmtz.com_bundle.crt;
ssl_certificate_key /etc/nginx/cert/qhdmtz.com.key;
使用强加密设置创建配置代码段
接下来,我们将创建另一个片段,用于定义一些SSL设置。这将使Nginx具有强大的SSL密码套件,并启用一些有助于保证我们的服务器安全的高级功能。 我们将为该文件指定一个通用名称:
xxxxxxxxxx
sudo vim /etc/nginx/snippets/ssl-params.conf
该文件内容如下:
x# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
调整Nginx配置以使用SSL
首先备份当前的nginx配置文件:
xxxxxxxxxx
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
然后生成我们自己的配置文件:
xxxxxxxxxx
sudo vim /etc/nginx/sites-available/qhdmtz
文件内容如下:
xxxxxxxxxx
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name qhdmtz.com www.qhdmtz.com;
charset utf-8;
client_max_body_size 70M;
return 301 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/ssl-qhdmtz.com.conf;
include snippets/ssl-params.conf;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
上述配置一共分为两个独立的配置块。 第一个server块主要是针对HTTP请求的配置。其中最后一行的作用是将未加密的HTTP请求自动重定向到加密的HTTPS。 第二个server块主要是针对HTTPS请求的配置。其中location部分,并未指向本地文件,而是定向到Gunicorn服务的8000端口。
测试Nginx配置
我们应该检查以确保我们的文件中没有语法错误。执行如下命令:
xxxxxxxxxx
sudo nginx -t
如果没有错误,会出现如下提示:
xxxxxxxxxx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
将配置文件软链接到sites-enabled目录
xxxxxxxxxx
sudo ln -s /etc/nginx/sites-available/qhdmtz /etc/nginx/sites-enabled
重启服务器
xxxxxxxxxx
sudo systemctl restart nginx
至此,全部配置完成!