Я развернул свой проект Laravel, в котором используется socket io на nginx
вот спецификация сервера:
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
вот мой файл конфигурации:
server {
listen 443 ssl;
server_name website.tld;
proxy_pass_header Server;
proxy_buffering off;
server_tokens off;
ssl_certificate /etc/nginx/ssl/biz/ssl.crt;
ssl_certificate_key /etc/nginx/ssl/biz/ssl.key;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
proxy_cookie_path / "/; secure;";
ssl_prefer_server_ciphers on;
server_name_in_redirect on;
proxy_buffer_size 128m;
proxy_buffers 4 256m;
proxy_busy_buffers_size 256m;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
root /home/laravel/public_html/public;
index index.php;
# Requests for socket.io are passed on to Node on port 3000
location /socket.io {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-VerifiedViaNginx yes;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy false;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$
{
# try_files $uri $uri/ /index.php?$args;
try_files $uri /index.php$request_uri;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Но при доступе к https: // сайт: 3000 вывод в браузере:
Этот сайт не может обеспечить безопасное соединение. Website.tld отправил неверный ответ. ERR_SSL_PROTOCOL_ERROR
Есть ошибки в моей конфигурации?
Для загрузки вашего веб-сайта вам не нужно указывать номер порта. Просто https://website.example
Сделаю. Причина в том, что теперь у вас есть nginx, обслуживающий ваш веб-сайт, через порт 443, порт https по умолчанию. Но вы пытались получить доступ к серверу socket.io напрямую, минуя nginx (и используя https, о котором он не говорит). Когда вы удалите номер порта, он будет подключаться к nginx через порт 443.
Кроме того, в целях безопасности вы должны убедиться, что ваш сервер socket.io прослушивает только соединения на localhost, чтобы злоумышленники не могли обойти nginx и подключиться к нему напрямую.