
Ich habe mein Laravel-Projekt bereitgestellt, das Socket-IO auf Nginx verwendet
hier ist die Serverspezifikation:
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"
hier ist meine Konfigurationsdatei:
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;
}
}
Aber beim Zugriff aufhttps://website:3000 die Ausgabe im Browser:
Diese Site kann keine sichere Verbindung bereitstellen. website.tld hat eine ungültige Antwort gesendet. ERR_SSL_PROTOCOL_ERROR
Irgendwelche Fehler in meiner Konfiguration?
Antwort1
Zum Laden Ihrer Website müssen Sie keine Portnummer angeben. Ich https://website.example
mache das einfach. Der Grund dafür ist, dass nginx Ihre Website jetzt auf Port 443, dem Standard-HTTP-Port, bereitstellt. Sie haben jedoch versucht, direkt auf den socket.io-Server zuzugreifen, indem Sie nginx umgangen haben (und HTTPS verwendet haben, das nicht kommuniziert). Wenn Sie die Portnummer entfernen, wird stattdessen eine Verbindung zu nginx auf Port 443 hergestellt.
Aus Sicherheitsgründen sollten Sie außerdem sicherstellen, dass Ihr socket.io-Server nur auf Verbindungen auf dem lokalen Host wartet, damit böswillige Benutzer nginx nicht umgehen und eine direkte Verbindung damit herstellen können.