我正在努力寻找 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.commyhost.com
/articles
即将wp.myhost.commyhost.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 的意义。