Nginx 配置反向代理 3 种不同类型应用的最佳实践

Nginx 配置反向代理 3 种不同类型应用的最佳实践

我正在努力寻找 nginx 服务器的“最佳”配置(我知道这是主观的,我将在稍后解释)。

我的服务器负责:

  • 从 3 个应用程序进行反向代理
  • 提供 SSL 证书

我正在寻找代理配置良好实践对于每种情况。

以下是架构

                              | Wordpress        | wp.myhost.com
                            - | articles app     |
                           /
                          /
                         /    | Complex          |
http://myhost --- nginx  ---- | node.js app      | myapp.herokuapp.com
                  server \    | hosted on heroku |
     ^                    \
 NS record                 \
  type A                    - | Simple node.js   |
                              | homepage hosted  | hp.herokuapp.com
                              | on heroku        |

我想要:

  • myhost.com(别名为www.myhost.com/去往hp.herokuapp.com
  • myhost.com /articles即将wp.​​myhost.com
  • myhost.com /app即将myapp.herokuapp.com

以下是我的工作内容:

upstream herokuhp {
  server hp.herokuapp.com:443;
}

upstream herokuapp {
  server app.herokuapp.com:443;
}

upstream wordpress {
  server wp.myhost.com:443;
}

server {
  listen 80;
  server_name myhost.com;
  server_alias www.myhost.com;
  rewrite ^(.*) https://$host$1;
}

server {
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/www.myhost.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/www.myhost.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

  server_name myhost.com;
  server_alias www.myhost.com;

  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  location ~ /articles {
    proxy_pass https://wordpress;
  }

  location ~ / {
    proxy_pass https://herokuhp;
  }

  location ~ /app {
    proxy_pass https://herokuapp;
  }
}

我现在想获得一些建议和最佳实践来优化这块配置(关于性能、SEO 友好度、应用更新意识),主要是围绕缓存, 和缓冲:)

答案1

从 nginx 的角度来看,您可以添加一条规则来管理静态文件的内存寿命以及浏览器内缓存,如下所示:

location ~* ^.+\.(ogg|ogv|svg|svgz|css|js|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
               expires max;
        }

但值得阅读该内容或使用 Google Sitespeed 或类似工具测试您的网站并遵循那里的建议。如果没有,您也可以启用压缩 - 设置已设置nginx.conf但可能需要启用文件类型。

Nginx 实际上并不缓存:静态文件从内存中提供,这种机制非常灵活,但您可能需要查看应用程序交付。Wordpress 前面有一个 nginx 插件,可以使缓存过期,这可能很有用。缓冲与后端的响应有关,虽然默认设置很好而且很灵活,但如果您看到前端超时,您可能需要进行一些调整,特别是如果您的后端位于本地网络之外,但除非必须,否则不要做任何事情。如果您.htaccess在后端使用漂亮的 URL 并使用 Wordpress,您可以继续使用。这大概就是 SEO 对您设置中的 nginx 的意义。

相关内容