Как настроить связку Nginx + Apache правильно?

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Ivan-R
проходил мимо
Сообщения: 5
Зарегистрирован: 2020-12-16 11:15:43

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение Ivan-R » 2020-12-16 12:29:00

Здравствуйте коллеги,
Объясните мне пожалуйста, как корректно настроить связку Nginx + Apache с несколькими сайтами на разных портах.
Я настраиваю ее впервые и не могу понять как это сделать правильно.
Скажем на Apache у меня есть два web-сервиса работающих на разных портах (8855 и 8836), как мне их пробросить в Nginx так, чтобы еще и стартовую страницу Apache видеть тоже?
Конечно в интернете полно описаний, все пишут "измените VirtualHost на *:8080", но тогда сайты, кроме стартовой страницы Apache, перестают работать.
Что не так? Как правильно?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

guest
проходил мимо

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение guest » 2020-12-16 19:24:29

Что не так? Как правильно?
не так - это то что Вы не понимаете как работает Apache.
Разберитесь как работает Apache, потом разберитесь как работает Nginx
и уж потом станет понятно, как и для чего nginx используют как
front-end к apache.
Скажем на Apache у меня есть два web-сервиса работающих на разных портах (8855 и 8836), как мне их пробросить в Nginx так, чтобы еще и стартовую страницу Apache видеть тоже?
делают ровно наоборот.

Чтобы понять как работает Apache и Virtual-Host в нем, нужно знать как работает DNS
и тогда не будет никаких проблем:
https://httpd.apache.org/docs/2.4/vhosts/index.html
по ссылке расписаны обе технологии и плюс примеры использования:
https://httpd.apache.org/docs/2.4/vhosts/examples.html

Если прочитаете внимательно, все поймете, не будете читать, так и будете мыкаться по форумам
и получать полу-ответы и полу-меры...

две технологии:
- Name-based Virtual Hosts (позволяет использовать много web-сайтов на одном ip-адресе)
для этого требуется в DNS настроить RR=A для каждого сайта.

- IP-based Virtual Hosts (для каждого сайта ОДИН выделенный ip-адрес)

Смешанный вариант: в одной конфигурации name-based и ip-based сайты

Аватара пользователя
wien
сержант
Сообщения: 151
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение wien » 2020-12-21 23:19:52

Front-End: Nginx, прослушиваемые порты 80, 443.

Код: Выделить всё

server {
        listen 80;
        server_name mysite.ru www.mysite.ru;
        root /var/www/sites/shops/www/mysite.ru;
        return 301 https://mysite.ru$request_uri;
        }

server {
        listen 443;

        # Server name and alias
        server_name mysite.ru www.mysite.ru;
    
        # SSL support
        ssl on;
        ssl_certificate /etc/letsencrypt/live/mysite.ru/cert.pem;
        ssl_certificate_key /etc/letsencrypt/live/mysite.ru/privkey.pem;

        location / {
                        proxy_pass http://127.0.0.1:8080;
                        proxy_redirect off;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Real-IP $remote_addr;
                        client_max_body_size 10m;
                        client_body_buffer_size 8k;
                        proxy_connect_timeout 90;
                        proxy_send_timeout 90;
                        proxy_read_timeout 90;
                        proxy_send_lowat 0;
                        proxy_buffer_size 4k;
                        proxy_buffers 8 4k;
                        proxy_busy_buffers_size 8k;
                        proxy_temp_file_write_size 8k;
                   }

        # Static content
        location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|mp3|bmp|flv|rtf|js|swf|iso)$ {
                        root /var/www/sites/shops/www/mysite.ru;
                        access_log off;
                        expires 1d;
                   }
                   # Deny access to .htpasswd files
        location ~ /\.ht {
                        deny all;
                        access_log off;
                        log_not_found off;
                   }

        # Logs
        access_log off;
        error_log /var/www/sites/shops/log/nginx_error.log;
        }
Back-End: Apache, висит на localhost, т.е. 127.0.0.1, слушает порт 8080:

Код: Выделить всё

<VirtualHost 127.0.0.1:8080>
    ScriptAlias /cgi-bin/ /var/www/sites/shops/cgi-bin/
    ServerAdmin support@mysite.ru
    SuexecUserGroup shops shops
    DocumentRoot /var/www/sites/shops/www/mysite.ru
    ServerName mysite.ru
    ServerAlias www.mysite.ru
    SetEnvIf X-Forwarded-Proto https HTTPS=on

    <Directory /var/www/sites/shops/www/mysite.ru>
        Options -Indexes +FollowSymLinks +ExecCGI
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . index.php
        AllowOverride All
        Require all granted
    </Directory>

    <Directory /var/www/sites/shops/cgi-bin>
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    DirectoryIndex index.php index.html index.htm index.shtml
    ErrorLog /dev/null
</VirtualHost>
Пример реально рабочий, предварительно обезличенный ;-)

Чтобы апач слушался как у меня и прочие фишки работали, в конфиге httpd.conf должны быть такие строки:

Код: Выделить всё

Listen 127.0.0.1:8080
LoadModule rpaf_module        libexec/apache24/mod_rpaf.so
ServerName 127.0.0.1:8080
# For security. Hide version
ServerSignature Off
ServerTokens Prod
# Enable RPAF module
RPAFenable On

# Set hostname transmit
RPAFsethostname On

# Front-end address
RPAFproxy_ips 127.0.0.1

# Header name
RPAFheader X-Real-IP

Ivan-R
проходил мимо
Сообщения: 5
Зарегистрирован: 2020-12-16 11:15:43

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение Ivan-R » 2021-05-05 17:10:34

guest писал(а):
2020-12-16 19:24:29
не так - это то что Вы не понимаете как работает Apache.
Разберитесь как работает Apache, потом разберитесь как работает Nginx
и уж потом станет понятно, как и для чего nginx используют как
front-end к apache.
... и т.д.
Пока ожидал ответов на свой вопрос сам нашел решение. Но какое уже не помню.

Ivan-R
проходил мимо
Сообщения: 5
Зарегистрирован: 2020-12-16 11:15:43

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение Ivan-R » 2021-05-05 17:13:02

wien писал(а):
2020-12-21 23:19:52
Пример реально рабочий, предварительно обезличенный
Хоть уже и не нужно, все равно спасибо (может еще кому-то поможет)

Гость
проходил мимо

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение Гость » 2021-07-22 12:08:45

ну теперь думаю надо вам идти дальше и исключить из этой связки вообще апач

Аватара пользователя
darkfire
рядовой
Сообщения: 10
Зарегистрирован: 2010-01-12 0:41:24
Откуда: Харьков
Контактная информация:

Как настроить связку Nginx + Apache правильно?

Непрочитанное сообщение darkfire » 2022-07-16 5:30:26

Для нового проекта можно и исключить Apache и запускаться только на Nginx. Но существующий проект не советую, на том же wordpress некоторые плагины достаточно трудно запустить на голом Nginx.
Нравится упорядочивать https://wiki.dieg.info