繁体   English   中英

nginx - 通过 nginx 反向代理的两个域

[英]nginx - two domains through nginx reverse proxy

我目前正在创建一个带有两个站点的 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 是因为它是我窗口的主机文件中具有相同域的下一个可用行,所以浏览器被告知 go 那里(?)。 在此处输入图像描述

对于我忘记提供的任何进一步信息,请询问。

我有类似的 function 但我确实有不同的“服务器”监听不同的 server_name 配置

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 设置为后端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM