什么是端口转发

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

  1. localhost:8001 //图书
  2. localhost:8002 //电影

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

  1. #配置负载均衡池
  2. #Demo1负载均衡池
  3. upstream book_pool{
  4. server 127.0.0.1:8001;
  5. }
  6. #Demo2负载均衡池
  7. upstream movie_pool{
  8. server 127.0.0.1:8002;
  9. }
  10.  
  11. #Demo1端口转发
  12. server {
  13. listen 80;
  14. server_name book.chanshuyi.com;
  15. access_log logs/book.log;
  16. error_log logs/book.error;
  17.  
  18. #将所有请求转发给demo_pool池的应用处理
  19. location / {
  20. proxy_set_header Host $host;
  21. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  22. proxy_pass http://book_pool;
  23. }
  24. }
  25. #Demo2端口转发
  26. server {
  27. listen 80;
  28. server_name movie.chanshuyi.com;
  29. access_log logs/movie.log;
  30. error_log logs/movie.error;
  31.  
  32. #将所有请求转发给demo_pool池的应用处理
  33. location / {
  34. proxy_set_header Host $host;
  35. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  36. proxy_pass http://movie_pool;
  37. }
  38. }

上面这段配置实现了:

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

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

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

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

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

  1. # For more information on configuration, see:
  2. # * Official English Documentation: http://nginx.org/en/docs/
  3. # * Official Russian Documentation: http://nginx.org/ru/docs/
  4.  
  5. user nginx;
  6. worker_processes auto;
  7. error_log /var/log/nginx/error.log;
  8. pid /run/nginx.pid;
  9.  
  10. # Load dynamic modules. See /usr/share/nginx/README.dynamic.
  11. include /usr/share/nginx/modules/*.conf;
  12.  
  13. events {
  14. worker_connections 1024;
  15. }
  16.  
  17. http {
  18. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  19. '$status $body_bytes_sent "$http_referer" '
  20. '"$http_user_agent" "$http_x_forwarded_for"';
  21.  
  22. access_log /var/log/nginx/access.log main;
  23.  
  24. sendfile on;
  25. tcp_nopush on;
  26. tcp_nodelay on;
  27. keepalive_timeout 65;
  28. types_hash_max_size 2048;
  29.  
  30. include /etc/nginx/mime.types;
  31. default_type application/octet-stream;
  32.  
  33. # Load modular configuration files from the /etc/nginx/conf.d directory.
  34. # See http://nginx.org/en/docs/ngx_core_module.html#include
  35. # for more information.
  36. include /etc/nginx/conf.d/*.conf;
  37.  
  38. upstream forwardport{
  39. server 127.0.0.1:8080;
  40. }
  41. server {
  42. listen 80 default_server;
  43. listen [::]:80 default_server;
  44. server_name qiaoliqiang.cn
  45. root /usr/share/nginx/html;
  46.  
  47. # Load configuration files for the default server block.
  48. include /etc/nginx/default.d/*.conf;
  49.  
  50. location / {
  51. proxy_connect_timeout 3;
  52. proxy_send_timeout 30;
  53. proxy_read_timeout 30;
  54. proxy_pass http://forwardport;
  55. }
  56.  
  57. error_page 404 /404.html;
  58. location = /40x.html {
  59. }
  60.  
  61. error_page 500 502 503 504 /50x.html;
  62. location = /50x.html {
  63. }
  64. }
  65.  
  66. # Settings for ap TLS enabled server.
  67. #
  68. # server {
  69. # listen 443 ssl http2 default_server;
  70. # listen [::]:443 ssl http2 default_server;
  71. # server_name _;
  72. # root /usr/share/nginx/html;
  73. #
  74. # ssl_certificate "/etc/pki/nginx/server.crt";
  75. # ssl_certificate_key "/etc/pki/nginx/private/server.key";
  76. # ssl_session_cache shared:SSL:1m;
  77. # ssl_session_timeout 10m;
  78. # ssl_ciphers HIGH:!aNULL:!MD5;
  79. # ssl_prefer_server_ciphers on;
  80. #
  81. # # Load configuration files for the default server block.
  82. # include /etc/nginx/default.d/*.conf;
  83. #
  84. # location / {
  85. # }
  86. #
  87. # error_page 404 /404.html;
  88. # location = /40x.html {
  89. # }
  90. #
  91. # error_page 500 502 503 504 /50x.html;
  92. # location = /50x.html {
  93. # }
  94. # }
  95.  
  96. }

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

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

【Nginx】 Nginx实现端口转发的更多相关文章

  1. Nginx实现数据库端口转发

    前言 因开发.测试.生成等服务器网络策略问题,导致部分服务器A需要访问数据库而无法正常访问数据库,此处采用端口代理方式解决此问题,即通过一台能正常访问数据库的服务器B做tcp端口代理,实现服务器A通过 ...

  2. windows下nginx中配置端口转发 ----本文来自转载

    什么是端口转发 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 转载原文链接:https://www.cnblogs.com/chanshuyi/ ...

  3. linux中nginx中配置端口转发

    域名指向主机IP地址,通过域名:8080才能访问网站,去掉后面的8080:或者其他的端口号,直接使用域名访问网站 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  4. 使用docker安装nginx并配置端口转发

    使用docker安装并运行nginx命令: docker run --name=nginx -p 80:80 -d docker.io/nginx 使用命令: docker exec -it ngin ...

  5. nginx做80端口转发

    server { server_name zjrzb.cn listen 80; location / { proxy_pass http://127.0.0.1:8090; proxy_set_he ...

  6. Windows下Nginx的安装与使用(一):配置端口转发

    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过: localhost:8001 //图书 lo ...

  7. Nginx 实现端口转发

    https://www.cnblogs.com/zhaoyingjie/p/7248678.html Nginx 实现端口转发 什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书 ...

  8. Ubuntu 16.04 -- 同时配置Nginx(转发)和frp(内网映射)和HTTPS(ca加密) - 端口转发

    Ubuntu16.04下: sudo apt -get nginx 用这条命令安装完nginx之后, nginx在该目录下: 然后配置nginx: 如下: 红圈圈住的地方多写几个可以做负载均衡. 端口 ...

  9. 【nginx配置】nginx做非80端口转发

    一个场景 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目.搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL ...

随机推荐

  1. MT【117】立体几何里的一道分类讨论题

    评:最后用到了中间的截面三角形两边之和大于第三边.能不能构成三棱锥时考虑压扁的"降维"打击是常见的方式.

  2. 【POJ2411】Mondriaan's Dream(轮廓线DP)

    [POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...

  3. 使用mshta.exe绕过应用程序白名单(多种方法)

      0x00 简介 很长一段时间以来,HTA文件一直被web攻击或在野恶意软件下载程序用作恶意程序的一部分.HTA文件在网络安全领域内广为人知,从红队和蓝队的角度来看,它是绕过应用程序白名单有价值的“ ...

  4. 解题:JSOI 2016 最佳团体

    题面 0/1分数规划+树形背包检查 要求$\frac{\sum P_i}{\sum S_i}的最大值,$按照0/1分数规划的做法,二分一个mid之后把式子化成$\sum P_i=\sum S_i*mi ...

  5. python之旅:文件处理

    一 文件操作及理论 1. 介绍 计算机系统分为:计算机硬件.操作系统.应用程序三部分我们用python或者其他程序,想要把数据永久的保存下来,就得写到硬盘里,但是应用程序是没有办法直接操作硬件的,这就 ...

  6. 团体程序设计天梯赛 L1-009. N个数求和

    易错题 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdboo ...

  7. Dubbo、Zookeeper集群搭建及Rose使用心得(二)

    上篇讲了一下配置,这次主要写一下这个框架开发的大概流程.这里以实现 登陆 功能为例. 一.准备工作 1.访问拦截器 用户在进行网站访问的时候,有可能访问到不存在的网页,所以,我们需要把这些链接重新定向 ...

  8. Python中hashlib模块

    介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...

  9. 批量打回未报bug修复

    半天写完了代码,从此开始了三天的bug修复... 问题背景:从合同系统那边获取数据. 1.开发完后,利用mock模拟合同数据,获取(mock中的合同)数据成功,但是在解析合同数据时出错,原因,mock ...

  10. AutoLayout中使用UIScrollView

    UIScrollView 在 Auto Layout 是一个很特殊的 view,对于 UIScrollView 的 subview 来说,它的 leading/trailing/top/bottom ...