Этот вопрос, вероятно, задавали несколько раз, но со всеми результатами, которые я смог найти, и своими небольшими знаниями, я как бы потерялся. Я использую Fedora 29.
Что я пытаюсь сделать с nginx:
Образец :
application.domain.com -> https: //hostname1.domain.local (или IP 1)
test.domain.com -> https: //hostname2.domain.local: 1234 (или IP 2)
www.domain.com -> https: //hostname3.domain.local (или IP 3) и т.д ...
Как я смогу это сделать? Давайте зашифруем настроенную мной конфигурацию nginx автоматически, но это кажется чересчур.
Большое спасибо за ответ, я чувствую, что добился некоторого прогресса, даже если пока не работаю. Я размещаю здесь свой полный файл конфигурации, потому что теперь у меня ошибка «502 Bad Gateway». IP-адрес не находится в той же подсети, что и обратный прокси-сервер, но полностью доступен, без межсетевого экрана или проблем с маршрутизацией.
Есть идеи, где я могу двигаться дальше? В исходной конфигурации также есть файл конфигурации certbot, который включает шифры и протоколы. Может надо заново включить?
Также: внутренние серверы, к которым я пытаюсь получить доступ, имеют сертификаты, подписанные моей собственной AD CS, но на обратном прокси-сервере не установлен корневой сертификат. Возможно я должен ?
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name scans.domain.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; # managed by Certbot
location / {
proxy_pass https://192.168.XX.YY/;
}
}
}
Чтобы NGINX разрешал несколько доменных имен для независимых прокси-серверов, вам необходимо настроить серверный блок для каждого используемого домена (и да, вам это нужно). include
предоставлено LE):
server {
listen 443 ssl;
server_name application.domain.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
proxy_pass https://hostname1.domain.local:80/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 443 ssl;
server_name test.domain.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
proxy_pass https://hostname3.domain.local:80/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 443 ssl;
server_name www.domain.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
location / {
proxy_pass https://hostname2.domain.local:1234/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
в конфигурации http.conf вы можете указать правило для перенаправления всего трафика, поступающего на порт 80 (независимо от домена):
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
если вы пытаетесь перенаправить https> http, вам также понадобится конфигурация обратного прокси, что-то вроде этого будет работать:
server {
listen 443 ssl;
server_name application.domain.com;
ssl on;
ssl_certificate /etc/ssl/public/application.domain.com.combined;
ssl_certificate_key /etc/ssl/private/application.domain.com.key;
location / {
proxy_pass http://hostname1.domain.local:80/;
}
}
Обратите внимание, что вам не обязательно размещать каждый из веб-сайтов на разных портах, nginx знает, какой контент предоставлять вашему клиенту на основе имени домена.
С Уважением,