返回介绍

设置 Nginx

发布于 2025-01-02 21:53:59 字数 2871 浏览 0 评论 0 收藏 0

由 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文