使用相同的端口和 IP 在 Nginx 和 Apache 上托管两个应用程序

使用相同的端口和 IP 在 Nginx 和 Apache 上托管两个应用程序

我在 Nginx 服务器上有一个 Rails 应用程序(example1.com),使用以下配置:

server {
    access_log off;

    passenger_enabled on;
    client_max_body_size 5M;
    listen 10.10.10.10:80;
    server_name www.example1.com;
    rails_env production;

    root   /var/www/production/example1/public;

    location / {
        root   /var/www/production/example1/public;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

一切正常。但是,现在我必须example2.com使用 Apache 安装另一个应用程序()。我的问题是 Apache 和 Nginx 实际上在同一台机器上,使用相同的 IP(public 238.x.x.xprivate 10.x.x.x)和相同的端口(80)。所以每次我尝试访问时example2.com,它实际上都会显示example1.com。这是我的 Apache 配置:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  www.example2.com

    DocumentRoot /var/www/production/example2
    DirectoryIndex index.html

    LogLevel Emerg
    ErrorLog /var/log/api/example2.com_err
    CustomLog /var/log/api/example2.com_cust Combined

    <Directory /var/www/production/example2>
        Options +ExecCGI
        AllowOverride all
    </Directory>
</VirtualHost>

我听说使用ProxyPass可以解决这个问题,但我缺乏这方面的知识,需要一些帮助。有办法吗?

答案1

这相当简单。Nginx 监听其感兴趣的域的 IP/端口,并将您告诉它的请求传递给 Apache。只需定义另一个 nginx 服务器块(通常在不同的配置文件中)即可,这样可以让您轻松完成操作 - nginx 并不关心。

您可能需要在 proxy_pass 区域中添加一些语句 - 请先尝试这个简单的案例,然后看看效果如何。

server {
    # removed extra lines - put back as required
    listen 10.10.10.10:80; # This line likely unnecessary
    server_name www.example2.com;

    location / {
        proxy_pass 10.x.x.x:81
    }
}

更改 Apache 以监听不同的端口。例如

<VirtualHost *:81>

尽管您可以完全放弃 Apache,让 Nginx 位于两个应用程序的前面,除非您出于某种原因确实需要 Apache。对于新位置,情况类似,看起来您只是在提供静态文件。

server {
    # removed extra lines - put back as required. Logging etc.
    listen 10.10.10.10:80; # This line likely unnecessary
    server_name www.example2.com;

    root /var/www/production/example2;
}

相关内容