• NGINX 实现端口转发


    Nginx是个厉害的服务器,可以配置多个服务器,一个server就是一个服务器

    server {
    
          listen       80;
    
          server_name  *.yourdomain.com;
    
     
    
       ....
    
    }

    代理转发是在server下面的location进行配置

    server {
    
       // 服务器配置
    
       location  / {
    
       // ...... 代理配置
    
       }
    
    }

    常见的Nginx代理配置

    upstream my_server {                                                        
    
        server 10.0.0.2:8080;                                               
    
        keepalive 2000;
    
    }
    
    server {
    
        listen       80;                                                        
    
        server_name  10.0.0.1;                                              
    
        client_max_body_size 1024M;
    
     
    
        location /my/ {
    
            proxy_pass http://my_server/;
    
            proxy_set_header Host $host:$server_port;
    
        }
    
    }

    通过该配置,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/


    什么是端口转发

    当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口。此时如果我们可以通过

    localhost:8001    //图书
    localhost:8002    //电影

    但我们一般访问应用的时候都是希望不加端口就访问域名,也即两个应用都通过 80 端口访问。但我们知道服务器上的一个端口只能被一个程序使用,这时候如何该怎么办呢?一个常用的方法是用 Nginx 进行端口转发。Nginx 的实现原理是:用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与其配置文件进行匹配并转发给对应的应用。例如当用户访问 book.douban.com 时,Nginx 从配置文件中知道这个是图书应用的 HTTP 请求,于是将此请求转发给 8001 端口的应用处理。当用户访问 movie.douban.com 时,Nginx 从配置文件中知道这个是电影应用的 HTTP 请求,于是将此请求转发给 8002 端口的应用处理。一个简单的 Nginx 配置文件(部分)如下面所示:

    #配置负载均衡池
    #Demo1负载均衡池
    upstream book_pool{
        server 127.0.0.1:8001;
    }
    #Demo2负载均衡池
    upstream movie_pool{
        server 127.0.0.1:8002;
    }
    
    #Demo1端口转发
    server {
        listen       80;
        server_name  book.chanshuyi.com;
        access_log logs/book.log;
        error_log logs/book.error;
        
        #将所有请求转发给demo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://book_pool;
        }
    }
    #Demo2端口转发
    server {
        listen       80;
        server_name  movie.chanshuyi.com;
        access_log logs/movie.log;
        error_log logs/movie.error;
        
        #将所有请求转发给demo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://movie_pool;
        }
    }

    上面这段配置实现了:

    1、当用户访问的域名是:http://book.chanshuyi.com 时,我们自动将其请求转发给端口号为 8001 的 Tomcat 应用处理。

    2、当用户访问的域名是:http://movie.chanshuyi.com 时,我们自动将其请求转发给端口号为 8002 的 Tomcat 应用处理。

    上面的这种技术实现就是端口转发。端口转发指的是由软件统一监听某个域名上的某个端口(一般是80端口),当访问服务器的域名和端口符合要求时,就按照配置转发给指定的 Tomcat 服务器处理。我们常用的 Nginx 也有端口转发功能。

    参考:

    https://www.php.cn/nginx/425693.html

    https://www.cnblogs.com/zhaoyingjie/p/7248678.html

  • 相关阅读:
    jmeter压力测试报错:java.net.BindException: Address already in use: connect
    C# 对话框总结(转载)
    C# 文件操作方法大全(转载)
    C#实现进度条progress control(转载)
    在Windows下架设FTP服务器
    .Net环境下,使用installutil.exe注册、删除windows服务
    用双网卡实现跨网段访问(转载)
    HTTP协议详解(转载)
    学习开发web服务(转载)
    C# 实现http协议的GET和POST请求(转载)
  • 原文地址:https://www.cnblogs.com/jingsupo/p/14134172.html
Copyright © 2020-2023  润新知