Я пытаюсь найти "лучший" (я знаю, что это субъективно, я объясню через минуту) конфиг для сервера nginx.
Мой сервер отвечает за :
и я ищу proxy config good practices для каждого случая.
Вот архитектура
| 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
(aliased to www.myhost.com
) /
going to 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 дружелюбия, осведомленности об обновлениях приложений), в основном вокруг кэширования, и буферизации :)
С точки зрения 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, который истекает срок действия кеша, и это может быть полезно.
Буферизация связана с ответом от бэкэнда, и хотя настройки по умолчанию хороши и гибки, вам, возможно, придется немного настроить, если вы видите тайм-ауты во внешнем интерфейсе, особенно если ваш бэкэнд находится за пределами вашей локальной сети,но ничего не делайте, если вам не нужно.
Если вы используете красивые URL-адреса с Wordpress, используя .htaccess
на вашем сервере, вы можете остаться с этим. Это примерно столько же, сколько SEO означает в отношении nginx в вашей настройке.