Рейтинг:2

Как обрабатывать прокси-вызов в apache

флаг cn

У меня есть настройка обратного прокси-сервера в Apache следующим образом:

Сервер А с адресом www.proxyserver.com/graphql является обратным прокси-сервером.

Он сопоставляется с: сервером B с адресом example.com.

Этот вид работает правильно в среде разработки.

Например: когда сервер вызывает запрос /graphql?query1=запрос1&query2=запрос2 затем он перенаправляет на https://proxyserver.com/graphql?query1=query1&query2=query2

Но в апаче не работает. Он звонит http://example.com/graphql?query1=query1&query2=query2

Как я могу это исправить?

Мой обратный прокси-сервер настроен следующим образом на сервере B (www.example.com):

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/example.com/build
    ServerName example.com
    ServerAlias www.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ProxyPreserveHost On
    ProxyPass "/graphql" "https://proxyserver.com/graphql"
    ProxyPassReverse "/graphql" "https://proxyserver.com/graphql"
</VirtualHost>

и это конфигурация сервера А

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin [email protected]
        DocumentRoot /etc/pub
        ServerName proxyserver.com
        ErrorLog logs/cezanno-error_log
        LimitRequestBody 104857600
        <Proxy "unix:/var/opt/remi/php73/run/php-fpm/php73-fpm.sock|fcgi://proxyserver.com">
            ProxySet timeout=100
        </Proxy>
        <FilesMatch \.(php|phar)$>
            SetHandler "proxy:fcgi://proxyserver.com"
        </FilesMatch>

        SSLCertificateFile /path/to/cert/directory/cert.pem
        SSLCertificateKeyFile /path/to/cert/directory/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateChainFile /path/to/cert/directory/chain.pem
    </VirtualHost>
</IfModule>
флаг cn
Я думал, что команды `Proxy...` предназначены для прокси-сервера (Сервер А). Сервер B даже не должен знать, что он находится за прокси-сервером. При этом может возникнуть необходимость _запомнить_ некоторые имена хостов, чтобы все работало должным образом. Вы также должны показать нам настройки сервера А.
Ming Hieu avatar
флаг cn
@AlexisWilke Я только что отредактировал свой пост. пожалуйста, проверьте выше
флаг cn
Хм... клиент подключается к серверу А или серверу Б?
Ming Hieu avatar
флаг cn
сервер B является клиентом (reactjs), а сервер A является бэкэндом (php). поэтому клиент подключается к серверу A
флаг cn
А, я вижу, вы используете сокет Unix (`unix:/var/opt/remi/php73/run/php-fpm/php73-fpm.sock`). В вашей разработке вы запускаете серверы A и B на одном компьютере, а в режиме реального времени они являются отдельными компьютерами? Это может быть проблемой. На самом деле я никогда не использовал сокет Unix для прокси-сервисов.
Ming Hieu avatar
флаг cn
нет, они на одном компьютере. часть конфигурации для сокета unix лишняя, я забыл ее удалить

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.