Назад | Перейти на главную страницу

Разместите два приложения на Nginx и Apache, используя один и тот же порт и IP

У меня есть приложение Rails (example1.com) на сервере Nginx, используя следующую конфигурацию:

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.x и private 10.x.x.x) и тот же порт (80). Поэтому каждый раз, когда я пытаюсь получить доступ example2.com, это действительно показывает мне example1.com. Вот моя конфигурация Apache:

<VirtualHost *:80>
    ServerAdmin admin@example2.com
    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 может решить эту проблему, но мне не хватает знаний в этой области, и мне нужна помощь. Как это сделать?

Это довольно тривиально. 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;
}