Назад | Перейти на главную страницу

Почему прокси-сервер Apache может обойти это, если nginx не может?

У меня есть SSL-хост на моем сервере apache со следующим в VirtualHost:

    <VirtualHost 217.147.92.100:443>
    ServerName server.com

    ServerAdmin email@email.com
    DocumentRoot /somepath/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine on

    SSLCertificateFile  /etc/something/fullchain.pem
    SSLCertificateKeyFile /etc/something/privkey.pem

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
    # MSIE 7 and newer should be able to use keepalive
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    SSLProxyEngine on
    ProxyPass "/rtapi/" "ws://localhost:38120/"
    ProxyPassReverse "/rtapi/" "ws://localhost:38120/"

    <Directory /somepath/>
        AllowOverride all
        Require all granted
    </Directory>
</VirtualHost>

До сих пор хорошо? Обратите внимание на прокси-пароль для папки / rtapi /. Старый добрый apache, как обычно, творит чудеса.

Теперь о нашем несчастном кемпере nginx, от которого я прошу гораздо меньше:

server {
listen 45108 ssl;

ssl on;
ssl_certificate /etc/something/fullchain.pem;
ssl_certificate_key /etc/something/privkey.pem;

location / {
    proxy_pass http://localhost:38120;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

}

Все, что я ищу от nginx, - это установить оболочку SSL в моем сервисе websocket и проксировать ее.

Я получил:

2017/08/24 19:55:01 [error] 25018#0: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 71.192.225.239, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:38120/", host: "api.speedracing.tv:45108"

Что кажется полезным. Ой! Мой маленький сервер websocket не должен отвечать ... но подождите секунду. Конечно, сервер должен быть запущен, потому что он принимает прокси-запросы от apache. Ясно, что логический вывод состоит в том, что nginx - это соединение, но я действительно не понимаю, почему и как.