Как разделить сайты на бекенде?

Nginx фронт Апач бэк.

У апача два виртуальных сайта site1 и site2
Как сделать так, чтобы nginx отдавал в одном случае site1, в другом site2 (только не разделять по портам)?
  • Вопрос задан
  • 3235 просмотров
Пригласить эксперта
Ответы на вопрос 7
Cram
@Cram
System Administrator
Во первых, nginx должен слушать порт 80 (можно только внешний ip), а apache другой, например 81 (можно только ip 127.0.0.1).

Дальше, чтобы всё хорошо работало - и в nginx, и в apache должны быть настроены те-же сайты отдельно - так не будет путаницы, и можно будет вносить изменения настроек для каждого сайта отдельно.

Соответственно настройки:

Выносим все настройки reverse-proxy nginx в отдельный файл:
>>> /etc/nginx/proxy.conf >>>
# настройка проксирования
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# настройка кеширования
proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
proxy_cache cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;


>>> /etc/nginx/sites-available/site1.ru.conf >>>
server {
listen 123.123.123.123:80;
server_name www.site1.ru site1.ru;
access_log /var/log/nginx/site1.ru_nginx_access_log;
error_log  /var/log/nginx/site1.ru_nginx_error_log;
location / {
include /etc/nginx/proxy.conf;
proxy_pass http://site1.ru:81;
}
#Статику отдаём напрямик
location ~* ^.+\.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mp3)$ {
expires 30d;
root /home/site1.ru/public_html;}
# Запрещаем открытие .htaccess через браузер
location ~ /\.ht {deny all;}
}


>>> /etc/nginx/sites-available/site2.ru.conf >>>
server {
listen 123.123.123.123:80;
server_name www.site2.ru site2.ru;
access_log /var/log/nginx/site2.ru_nginx_access_log;
error_log  /var/log/nginx/site2.ru_nginx_error_log;
location / {
include /etc/nginx/proxy.conf;
proxy_pass http://site2.ru:81;
}
#Статику отдаём напрямик
location ~* ^.+\.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mp3)$ {
expires 30d;
root /home/site2.ru/public_html;}
# Запрещаем открытие .htaccess через браузер
location ~ /\.ht {deny all;}
}


>>> /etc/apache2/sites-available/site1.ru.conf >>>
<VirtualHost 127.0.0.1:81>
ServerName site1.ru
ServerAlias www.site1.ru
DocumentRoot /home/site1.ru/public_html
...
</VirtualHost>


>>> /etc/apache2/sites-available/site2.ru.conf >>>
<VirtualHost 127.0.0.1:81>
ServerName site2.ru
ServerAlias www.site2.ru
DocumentRoot /home/site2.ru/public_html
...
</VirtualHost>
Ответ написан
Комментировать
@csergey Автор вопроса
Извините за не точный вопрос
server {
listen 80;
server_name site3
location /site1 {
proxy_pass http://site1:88;
proxy_redirect off;
proxy_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
server {
listen 80;
server_name site4
location /site2 {
proxy_pass http://site2:88;
proxy_redirect off;
proxy_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

В таком варианте не работает
Ответ написан
0neS
@0neS
Если nginx фронт, а apache бэк, то какой смысл nginx различать, на какой сайт идет запрос? Он должен все запросы перенаправлять на apache, а тот в свою очередь отдавать нужный контент.
Ответ написан
@csergey Автор вопроса
Что никто не знает как настроить такой мультидоменный веб сервер??
Ответ написан
@csergey Автор вопроса
Поясню вопрос ещё раз
Nginx- фронтэнд, Apache - бекенд. В конфиге nginx нужно прописать два виртуальных хоста site3 и site4. Что бы site3 на бекенде выдавал site1, а site4 выдавал site2.
Ответ написан
@csergey Автор вопроса
Спасибо за ответ. в принципе я понял что лучше делать такие сайты с одинаковыми именами
Ответ написан
Комментировать
0neS
@0neS
upstream backend {
  server 127.0.0.1:8080;
}

server {
  listen 80;
  server_name 12.23.34.45; /* внешний ip-адрес сервера */
  
  location / {
    proxy_pass http://backend/;
    proxy_redirect off;
    proxy_intercept_errors on;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
  location ~ /\.ht {
    deny all;
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы