Я новичок в 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.
Вы знаете, как решить эту проблему?
Спасибо.
Вы упомянули, что используете самозаверяющий сертификат на прокси-сервере. В этом случае вам нужно будет включить директиву 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>
Вам не хватает "
для директивы 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"