Обратный прокси Apache может получить, но не может разместить / опубликовать (ответ 403)

Я новичок в Apache, у меня проблема, когда мой веб-сайт вызывает ajax-сервер API.

Пример: https://example.com:11721/api/message -> https://api.example.com/api/message

Запрос PUT: https://example.com:11721/api/message/read -> https://api.example.com/api/message/read

Моя конфигурация может вызывать запрос на получение, но запрос на размещение / публикацию ответ (403 запрещено).

Вот моя конфигурация apache:

<IfDefine SSL>
<VirtualHost *:11721>
    ServerName  https://example.com
    ServerAlias example.com
    RewriteEngine on
    include conf/security.conf
    include conf/method.conf
    include conf/extension.conf
    include app_conf.d/https.mydomain.conf

    SetEnv SERVER_URL https://example.com
    SetEnv HTTPS ON
    #add SSL
    SSLEngine on

    # ---- Bellow config allow get request but put/post request response 403, if don't config follow it server will response 500.----------
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
    # ------ END ---------

    ProxyPass "/api" "https://ip-api-sever/api"
    ProxyPassReverse "/api" "https://ip-api-sever/api"

    SSLCertificateFile "/usr/local/apache/2.4.10/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache/2.4.10/conf/server.key"

    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

    CustomLog "|/usr/local/apache/2.4/bin/rotatelogs /var/apachelog/common/ssl/access.log.%Y%m%d%H%M%S 3600 +540" fanformat env=!images

    #mod_balancer
    include conf.d/proxy.https.mydomain.conf

</VirtualHost>
</IfDefine>

Пожалуйста, помогите мне, Спасибо


Спасибо за вашу поддержку.

После изменения конфига следуйте за вами, думаю, вы правы. Но я получаю другую ошибку.

Мой журнал ошибок:

[Чт, 19 апреля, 16:21: 46.115579 2018] [ssl: debug] [pid 1183] ssl_engine_kernel.c (1378): [удаленный xx.xx.xx.xx: 443] AH02275: Проверка сертификата, глубина 2, Режим проверки CRL: нет [тема: CN = VeriSign Class 3 Public Primary Certification Authority - G5, OU = (c) 2006 VeriSign \, Inc. - Только для авторизованного использования, OU = VeriSign Trust Network, O = VeriSign \, Inc. , C = США / эмитент: OU = публичный первичный центр сертификации класса 3, O = VeriSign \, Inc., C = США / серийный номер: xxxxxxxxxx / notbefore: 8 ноября 00:00:00 2006 GMT / notafter: 7 ноября 23: 59:59 2021 GMT]

[Чт, 19 апреля, 16:21: 46.115703 2018] [ssl: info] [pid 1183] [удаленный xx.xx.xx.xx: 443] AH02276: Проверка сертификата: Ошибка (20): невозможно получить локальный эмитент сертификат [тема: CN = VeriSign Class 3 Public Primary Certification Authority - G5, OU = (c) 2006 VeriSign \, Inc. - Только для авторизованного использования, OU = VeriSign Trust Network, O = VeriSign \, Inc., C = US / эмитент: OU = публичный первичный центр сертификации класса 3, O = VeriSign \, Inc., C = США / серийный номер: xxxxxxxxxxxxxxxxx / notbefore: 8 ноября 00:00:00 2006 GMT / notafter: 7 ноября 23:59:59 2021 GMT]

[Чт, 19 апреля, 16:21: 46.115902 2018] [ssl: info] [pid 1183] [удаленный xx.xx.xx.xx: 443] AH02003: не удалось подключиться к прокси-серверу SSL

[Чт, 19 апреля, 16: 21: 46.115960 2018] [ssl: info] [pid 1183] Ошибка библиотеки SSL: ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: не удалось проверить сертификат

[Чт, 19 апреля, 16: 21: 46.115979 2018] [ssl: info] [pid 1183] [удаленный xx.xx.xx.xx: 443] AH01998: соединение с дочерним элементом 0 закрыто с аварийным завершением работы (сервер mydomain: 443 )

[Чт, 19 апреля, 16:21: 46.116014 2018] [ssl: info] [pid 1183] [удаленный xx.xx.xx.xx: 443] AH01997: Ошибка установления связи SSL: отправлено 502

[Чт, 19 апреля, 16: 21: 46.116064 2018] [proxy_http: error] [pid 1183] (103) Программное обеспечение вызвало прерывание соединения: [клиент 10.128.14.1:48138] AH01102: ошибка чтения строки состояния с удаленного сервера xx. xx.xx.xx: 443 [Чт, 19 апреля, 16:21: 46.116115 2018] [proxy_http: debug] [pid 1183] mod_proxy_http.c (1369): [client 10.128.14.1:48138] AH01105: НЕ закрывает соединение с клиентом, несмотря на чтение с внутреннего сервера xx.xx .xx.xx: Ошибка 443.

Вы знаете, как решить эту проблему?

Спасибо.

-1
задан 19 April 2018 в 13:27
2 ответа

Вы упомянули, что используете самозаверяющий сертификат на прокси-сервере. В этом случае вам нужно будет включить директиву SSLProxyCACertificateFile, чтобы ваш текущий сервер доверял самозаверяющему сертификату, представленному прокси-сервером. Не забудьте также указать путь к сертификату CA.

Часть конфигурации необходимо изменить / добавить:

SSLProxyVerify require
SSLProxyVerifyDepth 1
SSLProxyCACertificateFile "/path/to/the/CACertifcateFile"
SSLProxyCheckPeerName on

Таким образом, весь ваш файл конфигурации должен выглядеть так:

<IfDefine SSL>
<VirtualHost *:11721>

    #----Local Configuration:#

    ServerName  https://example.com
    ServerAlias example.com
    RewriteEngine on
    include conf/security.conf
    include conf/method.conf
    include conf/extension.conf
    include app_conf.d/https.mydomain.conf

    SetEnv SERVER_URL https://example.com
    SetEnv HTTPS ON


    SSLEngine on
    SSLCertificateFile "/usr/local/apache/2.4.10/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache/2.4.10/conf/server.key"

    #----Proxy Configuration:#

    SSLProxyEngine on

    ProxyRequest off
    ProxyPass "/api" "https://ip-api-sever/api"
    ProxyPassReverse "/api" "https://ip-api-sever/api"

    SSLProxyVerify require
    SSLProxyVerifyDepth 1
    SSLProxyCACertificateFile "/path/to/the/CACertifcateFile"
    SSLProxyCheckPeerName on

    #----Local Configuration:#        

    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

    CustomLog "|/usr/local/apache/2.4/bin/rotatelogs /var/apachelog/common/ssl/access.log.%Y%m%d%H%M%S 3600 +540" fanformat env=!images

    #mod_balancer
    include conf.d/proxy.https.mydomain.conf

</VirtualHost>
</IfDefine>
0
ответ дан 5 December 2019 в 20:21

Вам не хватает " для директивы ProxyPassReverse. Вот почему запросы GET работают, но Запросы POST / PUT не работают.

Измените это:

 ProxyPass "/api" "https://ip-api-sever/api"
 ProxyPassReverse /api" "https://ip-api-sever/api"

На это:

 ProxyPass "/api" "https://ip-api-sever/api"
 ProxyPassReverse "/api" "https://ip-api-sever/api"
0
ответ дан 5 December 2019 в 20:21

Теги

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