【Nginx】 Nginx实现端口转发
什么是端口转发
当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 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实现端口转发相关推荐
- Nginx支持TCP端口转发
Nginx支持TCP端口转发 有个接口是通过socket通信,对端服务器访问存在IP限制,只好通过跳板机,因为它具备访问对端服务器的权限.nginx1.9开始支持tcp层的转发,通过stream实现的 ...
- Windows安装nginx并配置端口转发
Windows安装nginx并配置端口转发 1.场景 在VMware虚拟机中启动了几个Linux,采用的是NAT网络配置,所以另一个Windows访问无法进行ssh或者其它应用的访问 2.安装 2.1 ...
- Nginx之TCP端口转发
场景:很多企业业务都在云上,数据库端口基本不会对外开放.开发.测试人员经常会有通过外网去访问数据库的需求,此时我们可以利用nginx的端口转发功能来实现. 前提条件 :Nginx实现TCP端口转发,需 ...
- nginx实现ip端口转发_配置Nginx实现端口转发
#### 三.更改 Nginx 配置文件实现端口转发 1. 打开第二步中创建的 File Browser 网站([公网ip:端口]()),账号密码为 **admin/admin**,登录到 File ...
- nginx实现数据库端口转发
要利用Nginx实现MYSQL端口转发,需要依赖stream模块,用来做tcp端口转发, Nginx在编译安装时需要加上 --with-stream --with-stream_ssl_module ...
- 使用nginx做数据库端口转发
出于数据安全性考虑,正常情况下,网站或者项目的数据库一般都是禁止外网访问,或者只允许部分主机访问.那么,如何才能不修改这类权限的前提下,让其他被禁止访问的主机也能访问这个数据库呢.这时,Nginx的作 ...
- nginx实现ip端口转发_Nginx实现端口转发
只想看如何做请求转发的直接跳到「解决方案」 我在上@xiangzepro翔仔老师的java课程时,其中有一章需要验证微信服务器,又涉及到代码的远程调试.因为以下一些问题会造成我们在部署时的麻爪:微信公 ...
- nginx 实现多端口转发
什么是端口转发 我们在服务器上搭建了多个应用,例如9000端口应用是微信验证授权,9001端口是移动端站点,我们可以通过下面的方式访问: localhost:9000 localhost:9001 但 ...
- nginx实现ip端口转发_nginx 怎么做端口转发
问题描述 前端本地mook数据,前端项目在http://127.0.0.1:3000/ Mook数据的node服务在 http://127.0.0.1:4003/ 所有的跨域请求接口类似这种 http ...
- nginx实现ip端口转发_window端口转发端口映射nginx实现端口转发
Windows下端口转发,以实现远程端口3389为例 场景如下 先说明一下场景,服务器A处于局域网环境内,IP为192.168.1.200(同时作为虚拟机B的网关192.168.137.1),服务器A ...
最新文章
- Geoffrey Hinton 等6位图灵奖得主和100多位专家邀请您共话人工智能下一个十年
- 抢了人类编辑饭碗的AI算法,会完胜吗?
- Java高并发编程:多个线程之间共享数据的方式探讨
- 【图像处理opencv】_图像边缘
- STP生成树连载:制服网络广播风暴(1)
- 12.1 Bootstrap介绍
- 老司机找BUG指南,赶紧拿走。。
- 机智云小程序启蒙:WebSocket网页控制
- android模拟用户输入
- 2010年篮球规则(FIBA)
- php 9 698.00,698-00-0|2-溴-N,N-二甲基苯胺|2-bromo-N,N-dimethylaniline|2-Bromo-N,N-dimethylaniline......
- 如何零基础入门PS软件?
- 全流程电子化商事登记服务项目技术解决方案V1.0.1-10.13_-_评估稿
- 网页进行针式打印_针式打印机的页面打印设置小技巧解析
- PTA-寻找孪生素数
- 车牌识别采购、研发纵览
- SQL上机练习题目及答案
- Request(HTTP请求对象)的笔记和底层原理
- Android 学习之那些年我们遇到的BUG1:This view is not constrained, it only has designtime positions
- 操作系统原理学习-概述
热门文章
- 计算机通信技术用到的文献,计算机技术在通信中的应用与发展
- linux shell程序设计实验报告,linux的shell脚本实验报告
- python关闭线程daemon_python中threading开启关闭线程操作
- 分布式事务是啥?常用的解决方案有哪些?
- Guice使用入门以及整合Redis
- [零基础,全开源]基于web的远程深度学习服务搭建
- 浅谈bash shell的种类以及linux系统中的profile和bashrc配置文件
- VS.net中的远程调试
- 梯度下降的三种形式——BGD、SGD、MBGD
- Detectron2学习笔记