ngix或IIS上用反向代理实现80端口的微信开发环境配置

微信开发要求80端口,每个客户都建需要的成本很高,而且在本地调试也不方便。摸索出来一套办法,系统的整理出来,大家参考一下。(转载请注明“海宏软件”)。

1:客户自己有普通电脑、普通宽带,要求是电信、联通的普通光纤,自动获取的地址需要是公网不能是私有地址,不需要静态公网地址。

在客户电脑上安装3322动态域名,并配置好iis,端口用88,路由器映射出去88端口。

假设动态域名解析出来 http://test.3322.org:88

ngix或IIS上用反向代理实现80端口的微信开发环境配置

动态域名,就是把一个动态地址映射成一个固定的域名。

电信、联通都在试点城域网地址,如果动态域名解析的地址不是公网DHCP地址,可以打电信联通客服电话,请他们帮忙改成公网地址,他懂的。

ngix或IIS上用反向代理实现80端口的微信开发环境配置

2:我们需要有一台云服务器、一个域名,假设云服务器地址是1.1.1.1,备案开通80端口,域名是HaiHong.cn。

3:在域名解析添加A记录: test.HaiHong.cn,记录值指向1.1.1.1。

ngix或IIS上用反向代理实现80端口的微信开发环境配置

4:在服务器的iis里添加一个网站,主机名:test.Haihong.cn,目录建个空的指向即可。

ngix或IIS上用反向代理实现80端口的微信开发环境配置

之所以要用个空的,是因为建好后会自动生成一个web.config。

我最初测试的时候,指向了iis的webroot,配置好后,导致下面的二级网站打不开了。

5:在服务器安装微软的url-rewrite插件,安装完之后重启服务器,test网站会多出一个[url重写]。

1.URL Rewrite 下载地址: https://www.iis.net/downloads/microsoft/url-rewrite

2.Application Request Routing 下载地址:https://www.iis.net/downloads/microsoft/application-request-routing

ngix或IIS上用反向代理实现80端口的微信开发环境配置

6:双击打开url重写,添加规则,反向代理:

ngix或IIS上用反向代理实现80端口的微信开发环境配置

填写动态域名:haihong.3322.org:88 ,转发成 test.haihong.cn

ngix或IIS上用反向代理实现80端口的微信开发环境配置

好了,这样在外网访问:http://test.haihong.cn,就跳转指向到 http://haihong.3322.org:88 了

微信上认做已认证域名,并且是80端口,自己在电脑上调试也容易了。

微软官方文档:https://blogs.msdn.microsoft.com/friis/2016/08/25/setup-iis-with-url-rewrite-as-a-reverse-proxy-for-real-world-apps/

问题二:在C#程序中跳转RedirectTo时,跳转不出去,总是头部被替换。

在获取微信的授权id时,需要RedirectTo("https://weixin.open.com/connect//authorize?app),但是服务器总是截获后转成这样的:

http://域名/connect/oauth2/authorize?appid=wx6163645050dbc418&redirect_uri=http%3a。。。。。。

如何解决呢?试验和网上查了一个简单的办法:

1:点开根节点、ApplicationRequestRoutingcash(简称ARR)

ngix或IIS上用反向代理实现80端口的微信开发环境配置

2:点击右侧的ServerProxySetting:

ngix或IIS上用反向代理实现80端口的微信开发环境配置

3:去掉勾选【Reverse rewrite host in response headers】:

ngix或IIS上用反向代理实现80端口的微信开发环境配置

应用。ok

三:用Ngix作转发的几个例子:

ngix作转发效果也很好,需要运行ngix.exe程序。

以下是文件例子ngix.conf

#user  nobody;
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #-------------------首页不加限制的saas.mydomain.cn转向iis的81端口-------------------#
    upstream benji{
        server localhost:81;
    }
    #80默认到iis.http://127.0.0.1:81/
    server {
        listen       80;
        server_name  localhost;
        #server_name_in_redirect off;

        location / {
            proxy_pass          http://localhost:81/;
            #proxy_pass         http://benji/;
            #include proxy.conf;
            #proxy_redirect    off;

            proxy_set_header   Host $http_host;
            #proxy_set_header  Host $host;
            #proxy_set_header  Host $host:$server_port;
            #proxy_set_header  Host saas.mydomain.cn;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            #proxy_set_header  X-Forwarded-For $remote_addr;
            proxy_set_header   X-Real-IP $remote_addr;
        }
        access_log  logs/benji.log;
    }
    #80默认到iis.81
    #server {
    #    listen       80;
    #    server_name  localhost;

    #    location / {
    #        proxy_pass  http://localhost:81/;
    #    }
    #}

    #门户网站mydomain.cn
    server {
        listen       80;
        server_name  www.mydomain.cn mydomain.cn;

        location / {
            proxy_pass  http://localhost:82/;
        }
        access_log  logs/mydomain_cn.log;
    }

    #-------------------------------客户托管的实体网站---------------------------------#

#某院oa.abc.cn转向内网17.18.19.20

server {

listen 80;

server_name oa.abc.cn;

location / {

proxy_pass http://17.18.19.20/;

proxy_set_header Host $http_host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

}

}

    #OBE评测
    server {
        listen       80;
        server_name  obe.mydomain.cn;

        location / {
            proxy_pass  http://localhost:90/;
        }
    }

    #海宏物业系统
    server {
        listen       80;
        server_name  wuye.mydomain.cn;
        location / {
            proxy_pass  http://localhost:91/;
        }
    }


    #----------------------------给客户做的动态域名反向代理--------------------------#
    #jia.mydomain.cn转向my3322.3322.org:88
    server {
        listen 80;
        server_name jia.mydomain.cn;
        location / {   
                proxy_pass  http://my3322.3322.org:88/;  
        }
    }

    #海宏检测线系统.mydomain.cn转向jiance.tpddns.cn,jiance.zicp.vip:88,jiance.f3322.net:88
    server {
        listen 80;
        server_name jiance.mydomain.cn;
        location / {   
                proxy_pass  http://jiance.tpddns.cn:88/;  
        }
    }



}

  

proxy.conf没怎么用过,也贴出来算是备份一下吧。

            proxy_redirect          http:/saas.ihaihong.cn:81 http:/saas.ihaihong.cn/;
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            #client_max_body_size    1024m;
            #client_body_buffer_size 128k;
            #proxy_connect_timeout   90;
            #proxy_send_timeout      90;
            #proxy_read_timeout      300;
            #proxy_buffer_size       4k;
            #proxy_buffers           4 32k;
            #proxy_busy_buffers_size 64k;
            #proxy_temp_file_write_size 64k;
 
            #proxy_http_version 1.1;
            #proxy_set_header Upgrade $http_upgrade;
            #proxy_set_header Connection $connection_upgrade;