Перенаправить веб-сокет и json в SSL с NGINX

Я схожу с ума, чтобы решить проблему с конфигурацией neginx платформы живого ведения блога .

В http это работает, а вот конфигурация:

/etc/nginx/conf.d/default.conf

server {
    listen 80 default;
    include /etc/nginx/conf.d/*.inc;
}

/etc/nginx/conf.d/default.inc

location /ws {
    proxy_pass http://localhost:5100;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_read_timeout 3600;
    proxy_set_header Upgrade \$http_upgrade;
    proxy_set_header Connection "Upgrade";
}

location /api {
    proxy_pass http://localhost:5000;
    proxy_set_header Host $HOST;
    expires epoch;

    sub_filter_once off;
    sub_filter_types application/json;
    sub_filter 'http://localhost' 'http://\$host';
}


location /.well-known {
    root /var/tmp;
}
location / {
    root /opt/liveblog/client/dist;
    sub_filter_once off;
    sub_filter_types application/javascript;
    sub_filter 'http://localhost' 'http://\$host';
    sub_filter 'ws://localhost/ws' 'ws://\$host/ws';
}

/ etc /nginx/conf.d/params. conf

tcp_nopush on;
tcp_nodelay on;
output_buffers 1 256k;
postpone_output 0;
keepalive_requests 210;
reset_timedout_connection on;
ignore_invalid_headers  on;
server_tokens off;
client_max_body_size 1024m;
recursive_error_pages   on;
server_name_in_redirect off;

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Accept-Encoding "";
proxy_buffering on;
proxy_ignore_client_abort off;
proxy_intercept_errors on;
proxy_next_upstream error timeout invalid_header;
proxy_redirect off;
proxy_buffer_size 32k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
client_body_buffer_size 128k;
proxy_connect_timeout 1;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_cache_min_uses 1;
proxy_temp_path /var/tmp;

Вот моя конфигурация для использования SSL.

server {
    listen 80 default;
    listen  443 ssl;
    server_name live.dmove.it;
    include /etc/nginx/conf.d/*.inc;

    ssl_certificate /etc/letsencrypt/live/live.dmove.it/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/live.dmove.it/privkey.pem; # managed by Certbot
}

и /etc/nginx/conf.d/default.inc

location /ws {
    proxy_pass http://localhost:5100;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_read_timeout 3600;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

location /api {
    proxy_pass http://localhost:5000;
    proxy_set_header Host live.dmove.it;
    expires epoch;

    sub_filter_once off;
    sub_filter_types application/json;
    sub_filter 'http://localhost' 'https://$host';
}


location /.well-known {
    root /var/tmp;
}
location / {
    root /opt/liveblog/client/dist;

    # TODO: use "config.js:server" for user installations
    sub_filter_once off;
    sub_filter_types application/javascript;
    sub_filter 'http://localhost' 'http://$host';
    sub_filter 'ws://localhost/ws' 'ws://$host/ws';
}

Приложение javascript не может подключиться к websocket или api

WebSocket connection to 'wss://live.dmove.it:5100/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

app.bundle.js:142659 GET https://live.dmove.it:5000/api net::ERR_TIMED_OUT

Если я попробую в консоли

curl -i -H "Accept: application/json" http://localhost/api

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 20 Dec 2018 10:04:56 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:01 GMT

Итак, сервер работает ...

-1
задан 20 December 2018 в 12:05
1 ответ

Вы настраиваете сервер на общедоступном IP-адресе только на портах 80 (простой) и 443 (tls). Этот сервер перенаправляет определенные URL-адреса на порт 5000 или порт 5100 на локальном сервере (localhost). Это означает, что для доступа к части веб-сокета вам необходимо получить доступ к wss: //live.dmove.it/ws , который перенаправляет на localhost: 5100 , а не так, как вы пытались ] wss: //live.dmove.it: 5100 / ... . На порту 5100 нет общедоступного прослушивателя, только прослушиватель на локальном хосте.

0
ответ дан 5 December 2019 в 20:19

Теги

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