微信小程序https+wss共用443端口配置
发布于 4 年前 作者 nayi 3442 次浏览 来自 分享

写在前面:我使用的是Window Server 2012 R2服务器系统,IIS版本:8.5,我的网站各种服务,如PHP等都是在IIS下面跑,原先IIS使用的80端口+443端口,实现https访问。但是微信小程序得用443端口访问wss,所以得解决这个事,再操作这之前,先把IIS下网站的端口改一下,释放80端口,原先的443端口改成8080端口,因为后面要用到443+80端口的监听。查看端口是否被占用,可以CMD输入命令 netstat -ano 去看看占用情况。

要想实现微信小程序https和wss共用443端口,网上有教程使用IIS代理端口,我折腾了半天,没实现。我这里用nginx去监听443端口,然后再代理转发到IIS部署的网站其它端口上,从而实现端口共用。

要想实现https+wss,肯定少不了SSL证书,没有证书的,只能用http+ws,没办法了。大家可以提前去购买服务器的域名服务商下申请SSL证书,然后下载证书,下面部署需要用到证书。

1.nginx的安装

官网下载地址:https://nginx.org/en/download.html

nginx我选用的版本如下:

2.把下载的安装包先解压

3.配置conf文件夹下的nginx.conf

upstream webcom { #这里类似一个别名,在下文中使用
  server www.abc.com:8080; #服务器的地址,这个地址可以用IIS部署自己的网站,端口选用8080
  keepalive 64;
}

server {  
    listen  80;  #监听80端口,IIS服务器下网站端口建议配置为8080端口
    server_name www.abc.com;  #这里配置你的域名
      
    rewrite ^(.*)$  https://$host$1 permanent;#用户访问时实现http强制跳转为https  
} 

server {
   listen      443 ssl;#监听端口
   server_name www.abc.com;#配置域名,修改为你自己的域名
    root html;
    index index.html index.htm index.php;
    ssl_certificate ./ssl/www.abc.com.pem;#配置SSL证书,修改为你自己的证书
    ssl_certificate_key ./ssl/www.abc.com.key;#配置证书密钥,修改为你自己的
    access_log ./logs/www.abc.com.log;#配置日志输出,修改为你自己的
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

location = /mqtt {#当访问为wss://www.abc.com/mqtt
        # 8084就是我们的emq的websocket的端口号
        proxy_pass https://www.abc.com:8084; #需要安装EMQ软件,8084端口就是wss通讯端口,这里做代理转发
        proxy_redirect off;
        proxy_set_header Host www.abc.com:8084;
        proxy_set_header Sec-WebSocket-Protocol mqtt;
        # 这些都是 websocket必须要配置的
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }

       location / {#其余的就转发到网站实现https的访问
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass https://webcom/;#这里使用的是别名,在上面定义了的
       }
}

4.nginx配置文件按上面配置,按下面操作开启服务,就能实现443端口https+wss访问了。

5.为了后面命令操作方便,我先做一个nginx批处理bat,先新建一个txt文件,复制以下代码,另存为nginx.bat。

@echo off&color e&Title Nginx 命令行控制台

cls

:Begin

echo   **********************************
echo.
echo          Nginx 命令行控制台
echo.
echo   **********************************
echo. & echo   Script: %0% & echo.
echo 请输入命令:
echo.
echo     reload       重载 Nginx 配置
echo     stop         停止 Nginx 服务
echo     quit         退出 Nginx 服务
echo     list         查询 Nginx 服务
echo     info         输出 Nginx 安装信息
echo.
echo     kill         杀死 Nginx 进程
echo     start        启动 Nginx 进程
echo     restart      重启 Nginx 配置
echo.
echo     exit         退出控制台
echo     cmd          启动 cmd

echo.&echo.&set /p cmd=请输入:

if  "%cmd%"=="kill"     goto Kill
if  "%cmd%"=="exit"    goto End
if  "%cmd%"=="start"   goto Start
if  "%cmd%"=="info"   goto Info
if  "%cmd%"=="restart"   goto ReStart
if  "%cmd%"=="reload"  goto Reload
if  "%cmd%"=="stop"    goto Stop
if  "%cmd%"=="quit"    goto Quit
if  "%cmd%"=="list"    goto List
if  "%cmd%"=="cmd"     goto Cmd

cls
goto Begin

:End
exit

:Kill
cls
echo.
echo     尝试杀死 Nginx 进程
echo.
echo.&echo.
taskkill /F /IM nginx.exe
set cmd=
echo.&echo     执行完成
echo.&echo.
goto Begin

:Info
cls
echo.
echo     输出 Nginx 安装信息
echo.
nginx.exe -V

set cmd=
echo.&echo.
goto Begin

:Start
cls
echo.
echo     尝试启动 Nginx 进程
echo.
echo.&echo.

start nginx.exe

set cmd=
echo.&echo     执行完成
echo.&echo.
goto Begin

:ReStart
cls
echo.
echo     尝试杀死 Nginx 进程
echo.
echo.&echo.
taskkill /F /IM nginx.exe
echo.
echo     尝试启动 Nginx 进程
echo.
echo.&echo.

start nginx.exe

set cmd=
echo.&echo     执行完成
echo.&echo.
goto Begin

:Reload
cls
echo.
echo     尝试重新加载 Nginx 配置文件
echo.
echo.&echo.

nginx.exe -s reload
set cmd=
echo.&echo     执行完成

echo.&echo.
goto Begin

:Stop
cls
echo.
echo     停止 Nginx 服务
echo.
echo.&echo.

nginx.exe -s stop
set cmd=
echo.&echo     执行完成

echo.&echo.
goto Begin

:Quit
cls
echo.
echo     退出 Nginx 服务
echo.
echo.&echo.

nginx.exe -s quit
set cmd=
echo.&echo     执行完成

echo.&echo.
goto Begin

:List
cls
echo.
echo     查询 Nginx 服务
echo.

tasklist /fi "imagename eq nginx.exe"
set cmd=
echo.&echo.
goto Begin

:Cmd
cls
start cmd
set cmd=
goto Begin

运行nginx.bat文件,如下:

然后输入start,按回车键,即可开启nginx服务,就可以让微信小程序使用443端口共用https+wss了。

提示:每次修改配置文件,都要输入restart命令重启服务才能生效。

下篇帖子,我再讲以下EMQ X,实现mqtt通讯,以及ws+wss访问如何配置。因为这篇帖子涉及到443端口用nginx代理转发到mqtt服务上。

回到顶部