什么是端口转发

当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 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 也有端口转发功能。

例如我的一个80端口转发到8080tomcat服务器的配置:(注意红字地方即修改的地方)

linux下面修改的文件是:  /etc/nginx/nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {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  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;    upstream forwardport{server 127.0.0.1:8080;}server {listen       80 default_server;listen       [::]:80 default_server;     server_name  qiaoliqiang.cnroot         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;        location / {proxy_connect_timeout    3;proxy_send_timeout    30;proxy_read_timeout      30;proxy_pass      http://forwardport;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}# Settings for ap TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }}

当然也可以iptables进行转发:(80转到8080处理)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

转载于:https://www.cnblogs.com/qlqwjy/p/9206937.html

【Nginx】 Nginx实现端口转发相关推荐

  1. Nginx支持TCP端口转发

    Nginx支持TCP端口转发 有个接口是通过socket通信,对端服务器访问存在IP限制,只好通过跳板机,因为它具备访问对端服务器的权限.nginx1.9开始支持tcp层的转发,通过stream实现的 ...

  2. Windows安装nginx并配置端口转发

    Windows安装nginx并配置端口转发 1.场景 在VMware虚拟机中启动了几个Linux,采用的是NAT网络配置,所以另一个Windows访问无法进行ssh或者其它应用的访问 2.安装 2.1 ...

  3. Nginx之TCP端口转发

    场景:很多企业业务都在云上,数据库端口基本不会对外开放.开发.测试人员经常会有通过外网去访问数据库的需求,此时我们可以利用nginx的端口转发功能来实现. 前提条件 :Nginx实现TCP端口转发,需 ...

  4. nginx实现ip端口转发_配置Nginx实现端口转发

    #### 三.更改 Nginx 配置文件实现端口转发 1. 打开第二步中创建的 File Browser 网站([公网ip:端口]()),账号密码为 **admin/admin**,登录到 File ...

  5. nginx实现数据库端口转发

    要利用Nginx实现MYSQL端口转发,需要依赖stream模块,用来做tcp端口转发, Nginx在编译安装时需要加上 --with-stream --with-stream_ssl_module ...

  6. 使用nginx做数据库端口转发

    出于数据安全性考虑,正常情况下,网站或者项目的数据库一般都是禁止外网访问,或者只允许部分主机访问.那么,如何才能不修改这类权限的前提下,让其他被禁止访问的主机也能访问这个数据库呢.这时,Nginx的作 ...

  7. nginx实现ip端口转发_Nginx实现端口转发

    只想看如何做请求转发的直接跳到「解决方案」 我在上@xiangzepro翔仔老师的java课程时,其中有一章需要验证微信服务器,又涉及到代码的远程调试.因为以下一些问题会造成我们在部署时的麻爪:微信公 ...

  8. nginx 实现多端口转发

    什么是端口转发 我们在服务器上搭建了多个应用,例如9000端口应用是微信验证授权,9001端口是移动端站点,我们可以通过下面的方式访问: localhost:9000 localhost:9001 但 ...

  9. nginx实现ip端口转发_nginx 怎么做端口转发

    问题描述 前端本地mook数据,前端项目在http://127.0.0.1:3000/ Mook数据的node服务在 http://127.0.0.1:4003/ 所有的跨域请求接口类似这种 http ...

  10. nginx实现ip端口转发_window端口转发端口映射nginx实现端口转发

    Windows下端口转发,以实现远程端口3389为例 场景如下 先说明一下场景,服务器A处于局域网环境内,IP为192.168.1.200(同时作为虚拟机B的网关192.168.137.1),服务器A ...

最新文章

  1. Geoffrey Hinton 等6位图灵奖得主和100多位专家邀请您共话人工智能下一个十年
  2. 抢了人类编辑饭碗的AI算法,会完胜吗?
  3. Java高并发编程:多个线程之间共享数据的方式探讨
  4. 【图像处理opencv】_图像边缘
  5. STP生成树连载:制服网络广播风暴(1)
  6. 12.1 Bootstrap介绍
  7. 老司机找BUG指南,赶紧拿走。。
  8. 机智云小程序启蒙:WebSocket网页控制
  9. android模拟用户输入
  10. 2010年篮球规则(FIBA)
  11. php 9 698.00,698-00-0|2-溴-N,N-二甲基苯胺|2-bromo-N,N-dimethylaniline|2-Bromo-N,N-dimethylaniline......
  12. 如何零基础入门PS软件?
  13. 全流程电子化商事登记服务项目技术解决方案V1.0.1-10.13_-_评估稿
  14. 网页进行针式打印_针式打印机的页面打印设置小技巧解析
  15. PTA-寻找孪生素数
  16. 车牌识别采购、研发纵览
  17. SQL上机练习题目及答案
  18. Request(HTTP请求对象)的笔记和底层原理
  19. Android 学习之那些年我们遇到的BUG1:This view is not constrained, it only has designtime positions
  20. 操作系统原理学习-概述

热门文章

  1. 计算机通信技术用到的文献,计算机技术在通信中的应用与发展
  2. linux shell程序设计实验报告,linux的shell脚本实验报告
  3. python关闭线程daemon_python中threading开启关闭线程操作
  4. 分布式事务是啥?常用的解决方案有哪些?
  5. Guice使用入门以及整合Redis
  6. [零基础,全开源]基于web的远程深度学习服务搭建
  7. 浅谈bash shell的种类以及linux系统中的profile和bashrc配置文件
  8. VS.net中的远程调试
  9. 梯度下降的三种形式——BGD、SGD、MBGD
  10. Detectron2学习笔记