Nginx config best practices for reverse proxying 3 different type of apps

Я пытаюсь найти "лучший" (я знаю, что это субъективно, я объясню через минуту) конфиг для сервера nginx.

Мой сервер отвечает за :

  • Обратное проксирование с 3 приложений
  • Доставка ssl сертификатов

и я ищу 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.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
задан 11 December 2017 в 09:19
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, который истекает срок действия кеша, и это может быть полезно. Буферизация связана с ответом от бэкэнда, и хотя настройки по умолчанию хороши и гибки, вам, возможно, придется немного настроить, если вы видите тайм-ауты во внешнем интерфейсе, особенно если ваш бэкэнд находится за пределами вашей локальной сети,но ничего не делайте, если вам не нужно. Если вы используете красивые URL-адреса с Wordpress, используя .htaccess на вашем сервере, вы можете остаться с этим. Это примерно столько же, сколько SEO означает в отношении nginx в вашей настройке.

1
ответ дан 5 December 2019 в 19:41

Теги

Похожие вопросы