Назад | Перейти на главную страницу

Обратный прокси Nginx для многих локальных серверов + обязанность веб-сервера

В настоящее время мне нужно освоить сложную настройку: я хочу, чтобы nginx обслуживал веб-контент и глубоко перенаправлял на контент на локальных хостах (локальных приложениях) с измененными сообщениями. Я хочу, чтобы каждый запрос использовал https с использованием возможностей nginx и сертификации от LetEncrypt.

Я уже многого добился:

а) Сертификация запущена и работает и работает нормально (насколько я понимаю) б) веб-сервер работает нормально в) ОДИН поддомен работает хорошо, все остальные - нет

Тем не менее, я новичок и благодарен за каждое улучшение, которое вы мне можете указать. Я также заметил, что перенаправления медленные и подвержены ошибкам, но я не могу указать на это пальцем: /.

Давайте посмотрим на конфиг, он довольно большой (я покажу вам свой конфиг с поддержкой сайтов):

server {

    # Make it harder for attackers to know we are alive

    listen      80;
    server_name "";
    return      444;
}

Так что это не должно быть нашей проблемой ...

server {

    # Company homepage

    if ($host = www.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Project Management

    if ($host = pjm.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Organization Development Kanbanboard

    if ($host = organization.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = org.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Web Development Kanbanboard

    if ($host = development.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = dev.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Marketing Development Kanbanboard

    if ($host = marketing.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = mkt.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # Sales Development Kanbanboard

    if ($host = sales.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = sls.website.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  listen 80;
  server_name all_the_above_servernames_without_fail;
    return 404; # managed by Certbot
}

server {
  server_name website.com www.website.com;
  root /media/data/webserver/website.com;
  index index.html index.htm;
  location / {
        try_files $uri $uri/ =404;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Кажется, это тоже довольно часто используется, так что я думаю, что это нормально (правда?). Сайт работает безупречно и здесь нет никаких проблем.

Теперь к настройке обратных прокси:

server {
  server_name pjm.website.com;
  location / {

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

    # Fix the “It appears that your reverse proxy set up is broken" error.
    proxy_pass          http://localhost:1030;
    proxy_read_timeout  90;

    proxy_redirect      http://localhost:1030 https://pjm.website.com;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Сервис PJM тоже работает. Однако он медленный, и иногда приложение говорит вам перезагрузить. ...

server {
  server_name organization.website.com;
  location / {

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

    # Fix the “It appears that your reverse proxy set up is broken" error.
    proxy_pass          http://localhost:1030/ORG/ST;

    proxy_read_timeout  90;
    proxy_redirect      http://localhost:1030/ORG/ST https://organization.website.com;
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Однако эта служба не работает. Однако я могу добраться до него, когда захожу в pjm и продвигаюсь вверх, что утомительно.

Как решить эту проблему?