前言


前段时间给朋友开发网站, 上线几个月后想要接入支付宝在线支付. 支付宝接口申请需要给一个已经上线的网站. 由于一些原因, 朋友的网站没有申请通过, 现需用B2C网站做申请之用. 但是已上线的站点不能停用, 本着节约成本的原则, 我拒绝了他再去租用一台云服务器. 之前接触过一点点nginx, 便想通过nginx实现同一台云服务器/相同端口(80)通过域名做请求转发.

准备工作


  1. 准备nginx, nginx-1.12.2
  2. 准备sunny ngrok, 并下载相应客户端版本, 用于模拟两个域名
  3. 准备两个服务器(当前环境:Tomcat7.0.59 & php7+apache2.4), 也可以使用两个tomcat服务器

配置内网穿透


在sunny ngrok申请两个账号, 同时映射到 localhost:8081:

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_重启

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_重启_02

并在本地启用内网穿透:

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_php_03

配置nginx


将hyong.free.ngrok.cc和hyong2.free.ngrok.cc监听端口同时映射到8081(与SunnyNgrok配置一致即可)

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include             mime.types;
    default_type        application/octet-stream;
    sendfile            on;
    keepalive_timeout   65;

    #gzip  on;

    # 配置第一个代理规则
    # 域名: hyong.free.ngrok.cc
    # 监听端口: 8081
    server {
        listen              8081;
        server_name         hyong.free.ngrok.cc;
        location / {
            root            I:/php/httpd-2.4.26-Win64-VC15/Apache24/htdocs;
            index           index.php index.html;
            proxy_pass      http://127.0.0.1:8080;
        }
    }

    # 配置第二个代理规则
    # 域名: hyong2.free.ngrok.css
    # 监听端口: 8081, 端口与第一个规则相同
    server {
        listen              8081;
        server_name         hyong2.free.ngrok.cc;
        location / {
            root            I:\java-working\server\apache-tomcat-7.0.59;
            index           index.jsp index.html;
            proxy_pass      http://127.0.0.1:9000;
        }
    }
}

接下来启动nginx中文网:

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_域名_04

nginx for windows相关命令

cmd> cd nginx_home:

命令

说明

start nginx

后台启用nginx, 前台启动(cmd>nginx.exe)

nginx -s stop

快速停止

nginx -s quit

安全停止

nginx -s reload

改变配置,开始新的工作进程与新配置,优雅的关闭旧的工作进程

nginx -s reopen

重启, 重启日志文件

校验nginx启动是否成功: tasklist /fi "imagename eq nginx.exe"

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_nginx_05

启动服务器


视情况而定, 当前启动 Tomcat&Apache

测试验证


访问 http://hyong.free.ngrok.cc

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_nginx_06

访问 http://hyong2.free.ngrok.cc

docker 端口 和nginx 监听端口 和前端服务端口的区别 nginx监听80端口_php_07

漂亮: 测试通过!!!

总结


  1. nginx并未使用在真实项目中, 因此对nginx并未深入研究
  2. 除了负载均衡(个人觉得应该叫并发瓶颈转移), 还可以做请求转发
  3. 经过本次测试, 发现nginx还具有端口路由的功能. 此后做web开发时, 就可以同时对外提供多个相同端口的不同服务了 ^ - ^