У меня есть приложение 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;
}