nginx - два домена через обратный прокси-сервер nginx - PullRequest
0 голосов
/ 01 октября 2019

В настоящее время я работаю над созданием dockerized сервера с двумя сайтами. Я хочу, чтобы они оба работали через порт 443. До сих пор мне удавалось заставить одного из них работать самостоятельно, используя обратный прокси-сервер nginx, но когда я пытаюсь сделать и то, и другое, кажется, что мой сервер полностью игнорируется.

stream {
upstream shop_local_xposi_com {
    server 127.0.0.1:9000;
}

upstream sockets_local_xposi_com {
    server 127.0.0.1:9001;
}

map $ssl_preread_server_name $upstream {
    shop.local.xposi.com shop_local_website_com;
    socket.local.xposi.com sockets_local_website_com;
}

# SHOP webserver
server {
    # SSL
    listen 127.0.0.1:9000 ssl;
    ssl_certificate /etc/nginx/certs/website.com.crt;
    ssl_certificate_key /etc/nginx/certs/website.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;

    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

# SOCKET webserver
server {
    # SSL
    listen 127.0.0.1:9001 ssl;
    ssl_certificate /etc/nginx/certs/website.com.crt;
    ssl_certificate_key /etc/nginx/certs/website.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;

    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass socket:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

server {
    listen 443;
    ssl_preread on;
    proxy_pass $upstream;
}
}

При запуске только одного сервера этот конфигурационный файл был только одним из более крупных разделов сервера, который работал отлично. Но при попытке создать настройку, которую я пытаюсь создать (диаграмма ниже), она мгновенно перенаправляет на API в моей среде принятия. Я предполагаю, почему этот конкретный API-интерфейс заключается в том, что это следующая доступная строка с тем же доменом в файле hosts моего окна, поэтому браузеру предлагается перейти туда (?). enter image description here

Для получения дополнительной информации, которую я забыл дать, пожалуйста, спросите.

1 Ответ

0 голосов
/ 01 октября 2019

У меня похожая функция, но у меня есть разные «серверы», слушающие разные конфигурации имени_сервера

server {
    listen 80 ; (or listen 443 ;)

    server_name     shop-local.website.com ;
    location / {
        ... some code
        proxy_pass http://shoplocalwebsiteIP:port;
    }

}

server {
    listen 80 ; (or listen 443 ;)

    server_name     socket-local.website.com ;
    location / {
        ... some code
        proxy_pass http://socketlocalwebsiteIP:port;
    }

}

Вы можете инкапсулировать имя сервера в желаемом блоке, а затем установить правильный proxy_pass в backend.

...