设置 Nginx
由 gunicorn 启动的 microblog 应用服务器现在运行在本地端口 8000。 我现在需要做的是将应用程序暴露给外部世界,为了使面向公众的 web 服务器能够被访问,我在防火墙上打开了两个端口(80 和 443)来处理应用程序的 Web 通信。
我希望这是一个安全的部署,所以我要配置端口 80 将所有流量转发到将要加密的端口 443。 我将首先创建一个 SSL 证书。创建一个 自签名 SSL 证书 ,这对于测试是可以的,但对于真正的部署不太好,因为 Web 浏览器会警告用户,证书不是由可信证书颁发机构颁发的。 创建 microblog 的 SSL 证书的命令是:
$ mkdir certs
$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-keyout certs/key.pem -out certs/cert.pem
该命令将要求你提供关于应用程序和你自己的一些信息。 这些信息将包含在 SSL 证书中,如果用户请求查看它,Web 浏览器则会向用户显示它们。上述命令的结果将是名为 key.pem 和 cert.pem 的两个文件,我将其放置在 Microblog 根目录的 certs 子目录中。
要有一个由 nginx 服务的网站,你需要为它编写配置文件。 在大多数 nginx 安装中,这个文件需要位于 /etc/nginx/sites-enabled 目录中。Nginx 在这个位置安装了一个我不需要的测试站点,所以我将首先删除它:
$ sudo rm /etc/nginx/sites-enabled/default
下面你可以看到 Microblog 的 nginx 配置文件,它在 /etc/nginx/sites-enabled/microblog 中:
/etc/nginx/sites-enabled/microblog :Nginx 配置。
server {
# listen on port 80 (http)
listen 80;
server_name _;
location / {
# redirect any requests to the same URL but on https
return 301 https://$host$request_uri;
}
}
server {
# listen on port 443 (https)
listen 443 ssl;
server_name _;
# location of the self-signed SSL certificate
ssl_certificate /home/ubuntu/microblog/certs/cert.pem;
ssl_certificate_key /home/ubuntu/microblog/certs/key.pem;
# write access and error logs to /var/log
access_log /var/log/microblog_access.log;
error_log /var/log/microblog_error.log;
location / {
# forward application requests to the gunicorn server
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
# handle static files directly, without forwarding to the application
alias /home/ubuntu/microblog/static;
expires 30d;
}
}
Nginx 的配置不易理解,但我添加了一些注释,至少你可以知道每个部分的功能。 如果你想获得关于特定指令的信息,请参阅 nginx 官方文档 。
添加此文件后,你需要告诉 nginx 重新加载配置以激活它:
$ sudo service nginx reload
现在应用程序应该部署成功了。 在你的 Web 浏览器中,可以键入服务器的 IP 地址(如果使用的是 Vagrant VM,则为 192.168.33.10),然后该服务器将连接到应用程序。 由于你使用的是自签名证书,因此将收到来自 Web 浏览器的警告,你必须解除该警告。
使用上述说明为自己的项目完成部署之后,我强烈建议你将自签名证书替换为真实的证书,以便浏览器不会在用户访问你的网站时发出警告。 为此,你首先需要购买域名并将其配置为指向你的服务器的 IP 地址。 一旦你有一个域名,你可以申请一个免费的 Let's Encrypt SSL 证书。 我在博客上写了一篇关于如何 通过 HTTPS 运行你的 Flask 应用程序 的详细文章。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论