В настоящее время мне нужно освоить сложную настройку: я хочу, чтобы 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 и продвигаюсь вверх, что утомительно.
Как решить эту проблему?