顯示具有 伺服器架設 標籤的文章。 顯示所有文章
顯示具有 伺服器架設 標籤的文章。 顯示所有文章

2020年2月5日 星期三

使用 nginx websocket https to http

最近專案遇到一坑,之前 http 使用 ws 都很順利,但是上了https之後,網頁強制要使用 wss... 就卡住了
Nginx 配置 轉發代理,網路上很多教學都寫一半,最後看懂就~ 這樣寫最精簡,直接 調用ws 去處理後續的東西

NGINX配置文件
server {
    server_name             域名;

    location / {
        root                   PATH;
        index                  index.php index.html index.htm;
        try_files              $uri $uri/ /index.php?$query_string;
    }
 
    location ~ \.php$ {
        root                   PATH;
        fastcgi_pass           unix:/var/run/php-fpm/www.sock;
        fastcgi_index          index.php;
        fastcgi_param          SCRIPT_FILENAME
        $document_root$fastcgi_script_name;
        111111
        include                fastcgi_params;
    }
 
    listen                  443 ssl; # managed by Certbot
    ssl_certificate         證書
    ssl_certificate_key     證書
    include                 /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam             /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 
    location / {
        proxy_pass             服務位置
        #例如                    http://127.0.0.1:8092/ws;
        proxy_http_version     1.1;
        proxy_set_header       Upgrade $http_upgrade;
        proxy_set_header       Connection "Upgrade";
        proxy_set_header       X-Real-IP $remote_addr;
        add_header             Access-Control-Allow-Origin *;
        proxy_connect_timeout  60s;
        proxy_read_timeout     500s;
        proxy_send_timeout     500s;
    }
 
}
server {
    if ($host = 域名) {
        return                 301 https://$host$request_uri;
        }                      # managed by Certbot
 
        listen                 80;
 
        server_name            域名;
        return                 404; # managed by Certbot
 
    }
Go Server
package main

import (
    "log"
    "net/http"
 
    "github.com/gorilla/websocket"
)
 
func main() {
    upgrader := &websocket.Upgrader{
        //如果有 cross domain 的需求,可加入這個,不檢查 cross domain
        CheckOrigin: func(r *http.Request) bool { return true },
    }
    http.HandleFunc("/"func(w http.ResponseWriter, r *http.Request) {
        cerr := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println("upgrade:", err)
            return
        }
        defer func() {
            log.Println("disconnect !!")
            c.Close()
        }()
        for {
            mtypemsgerr := c.ReadMessage()
            if err != nil {
                log.Println("read:", err)
                break
            }
 
            log.Printf("receive: %s\n", msg)
            msg = []byte("伺服器接收成功")
            log.Printf("re_send: %s\n", msg)
 
            err = c.WriteMessage(mtype, msg)
            if err != nil {
                log.Println("write:", err)
                break
            }
        }
    })
    log.Println("server start at :8000")
    log.Fatal(http.ListenAndServe(":8000"nil))
}
Go Client
package main

import (
    "log"
 
    "github.com/gorilla/websocket"
)
 
func main() {
    // ws_connection := "ws://fishstg.1c5game.com:8000/echo"
    // ws_connection := "wss://18.139.24.117:8092/ws"
    ws_connection := "wss://fishstg.1c5game.com/ws"
    // ws_connection := "wss://echo.websocket.org/"
    log.Printf("ws_connection: %s\n", ws_connection)
    c_err := websocket.DefaultDialer.Dial(ws_connection, nil)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer c.Close()
 
    i := 1
    for i <= 10 {
        // fmt.Println(i)
        send_msg := "{\"protocol\"  : \"platform_debit_all\",  \"data\"  :{ \"id\":1 , \"gametoken\":123456465 }}"
        log.Printf("send_msg: %s\n", send_msg)
        err = c.WriteMessage(websocket.TextMessage, []byte(send_msg))
        if err != nil {
            log.Println(err)
            return
        }
        _msgerr := c.ReadMessage()
        if err != nil {
            log.Println("read:", err)
            return
        }
        log.Printf("received: %s\n", msg)
        i++
    }
}
----------------------

拯救老電腦

 Sempron 3850 Socket AM1入門四核處理器 2014 8ram  作業系統 windows 10 1904 評論: 八年的核心,其他的故障電腦拆解零組件都是拼裝. 整體使用上,可以基本文書,瀏覽網站,聽音樂等等都可以接受的。 下次再來繼續搞更多..