2017-01-25 13 views
8

के माध्यम से nginx के साथ PHP websockets nginx में PHP के साथ websockets कैसे सेट करें?एसएसएल

मैं इस ट्यूटोरियल पर ध्यान दिया है, लेकिन नहीं कर सकते यह काम

https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket

www निर्देशिका

/index.php /jquery-3.1.1.js /websocket/server.php

की जड़ में तीन फ़ाइलों की नकल की है बनाना index.php में मैंने यूआरआई

बदल दिया है
var wsUri = "wss://domain.com/websocket/server.php"; 

nginx में मैं इस

http { 
    map $http_upgrade $connection_upgrade { 
     default upgrade; 
     ''  close; 
    } 
    server { 
     location /websocket/ { 
      proxy_pass https://domain.com:9000/websocket/server.php; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection $connection_upgrade; 
     } 
    } 
} 

http://nginx.org/en/docs/http/websocket.html

शुरू करने के लिए WebSocket सर्वर

php -q /var/www/websocket/server.php 

चैट https://domain.com/chat.php और भार में स्थित लेकिन बातचीत में यह त्रुटि प्राप्त कर रहा है को शामिल किया है विंडो Error Occurred - Connection closed

,210

भी, इस उपकरण के माध्यम से कनेक्ट करने की कोशिश की है, लेकिन अगर ब्राउज़र

wss://domain.com/websocket/server.php 


ERR_DISALLOWED_URL_SCHEME 
+1

लिए मुझे लगता है त्रुटि ब्राउज़र विंडो में प्रदर्शित किया जाता है परिवर्तन करने, nginx या php लॉग नहीं। क्या आप इस परीक्षण के लिए Google क्रोम का उपयोग कर किसी भी मौके से हैं (https://productforums.google.com/forum/#!topic/chrome/leVmLPNVISI)? यदि ऐसा है, तो दूसरे ब्राउज़र के साथ प्रयास करें। –

+0

हां त्रुटि Google क्रोम ब्राउज़र में होती है .. एफएफ के साथ भी कोशिश की गई है .. यहां मुझे त्रुटि भी नहीं मिली है – clarkk

+1

अपने क्लाइंट और nginx और nginx और php, respectivley के बीच यातायात पर सहेजने का प्रयास करें, उदाहरण के लिए नेटवर्क स्तर पर अपेक्षा के अनुसार सेटअप काम कर रहा है या नहीं, यह जांचने के लिए 'tcpdump''। –

उत्तर

2

आप अपने nginx विन्यास में पोर्ट 9000 का उपयोग कर रहे के माध्यम से अनुरोध किया इस त्रुटि

http://www.websocket.org/echo.html

ERROR: undefined 
DISCONNECTED 

मिल जबकि PHP का अंतर्निर्मित वेब सर्वर पोर्ट 8000 पर चलता है।

पोर्ट को 8000 में बदलने का प्रयास करें और देखें I एफ जो इसे हल करता है।

proxy_pass http://domain.com:8000/websocket/; 

संपादित करें:

ERR_DISALLOWED_URL_SCHEME

क्रोम के बारे में, ~ के बाद से संस्करण 50, आवश्यक है कि सभी WebSocket संचार SSL पर हो। आपको संभवतः क्रोम में अपना ऐप काम करने के लिए सक्षम करने की आवश्यकता होगी।

  1. एक प्रमाण पत्र एक विश्वसनीय प्रमाणन प्राधिकरण
  2. द्वारा जारी किए गए प्रयोग कर अपने विश्वसनीय प्रमाणपत्र जड़ों को मैन्युअल रूप से प्रमाणपत्र जोड़ें:

    आपके पास दो विकल्प। आपका वेब एप्लिकेशन ऐसे किसी भी व्यक्ति के लिए काम नहीं करेगा जो मैन्युअल रूप से ऐसा नहीं करता है

+0

वेबसाइकिल URL 'ERR_DISALLOWED_URL_SCHEME' – clarkk

+0

का अनुरोध करते समय एक ही त्रुटि प्राप्त होनी चाहिए अब एसएसएल चलाने के लिए nginx में कॉन्फ़िगरेशन बदल दिया है, लेकिन फिर भी एक ही त्रुटि – clarkk

+0

क्या वह प्रमाणपत्र है जिसका आप स्वयं हस्ताक्षर कर रहे हैं? क्रोम इसे –

1

मैंने आपकी कॉन्फ़िगरेशन फ़ाइल में कुछ गड़बड़ियां देखी हैं; मेरे अवलोकन इस प्रकार हैं:

  • चल रहा है php -q /var/www/websocket/server.php सरल सॉकेट सर्वर शुरू करेगा।यह एसएसएल नहीं होगा; मुझे लगता है कि आप इसे nginx के माध्यम से क्यों गुजर रहे हैं। यही है ना?
  • इस प्रकार proxy_pass https://domain.com:9000/websocket/server.php; https नहीं होना चाहिए। आपको पूर्ण पथ की भी आवश्यकता नहीं है क्योंकि यह एक साधारण टीसीपी सॉकेट है और फ़ाइल पथ नहीं है। इस प्रकार बस proxy_pass http://127.0.0.1:9000; करना चाहिए।
  • यदि आप nginx पर SSL लागू कर रहे हैं; वे सेटिंग्स कहां हैं?
  • सभी नए ब्राउज़रों में; आप एक सुरक्षित https पृष्ठ से असुरक्षित http या ws संसाधनों तक नहीं पहुंच सकते हैं।

इस प्रकार मेरी कॉन्फ़िगरेशन फ़ाइल निम्नानुसार है जो कि इरादे के रूप में काम कर रही है।

server { 
    listen 8080 default_server; 
    listen 8443 ssl; 

    ssl_certificate /home/ubuntu/Desktop/php-sock/newcert.pem; 
    ssl_certificate_key /home/ubuntu/Desktop/php-sock/newkey.pem; 

    root /home/ubuntu/Desktop/php-sock; 

    index index.php index.html index.htm; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 

    location ~ \.php$ { 
     include snippets/fastcgi-php.conf; 
     fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
    } 

    location /websocket/ { 
     proxy_pass http://127.0.0.1:9000; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_read_timeout 86400; 
    } 
} 

इसके अलावा में index.phpvar wsUri = "wss://localhost:8443/websocket/";