搭建nginx反向代理用做内网域名转发

为什么80%的码农都做不了架构师?>>>   hot3.png

情景 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端口的映射在访问的时候要域名加上端口,比较麻烦。并且公司入口路由最多只能做20个端口映射。肯定以后不够用。 然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给内网不同机器的端口,就起到了“根据域名自动转发到相应服务器的特定端口”的效果,而路由器的端口映射做到的只是“根据不同端口自动转发到相应服务器的特定端口”,真是喜大普奔啊。 涉及的知识:nginx编译安装,nginx反向代理基本配置,路由端口映射知识,还有网络域名等常识。 本次实验目标是做到:在浏览器中输入xxx123.tk能访问到内网机器192.168.10.38的3000端口,输入xxx456.tk能访问到内网机器192.168.10.40的80端口。 配置步骤 服务器ubuntu 12.04 ###更新仓库
apt-get update -y
apt-get install wget -y
#下载nginx和相关软件包 pcre是为了编译rewrite模块,zlib是为了支持gzip功能。额,这里nginx版本有点旧,因为我还要做升级nginx的实验用。大家可以装新版本。
cd /usr/local/srcwget <a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz">ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz</a>wget <a href="http://zlib.net/zlib-1.2.8.tar.gz">http://zlib.net/zlib-1.2.8.tar.gz</a>wget <a href="http://nginx.org/download/nginx-1.4.2.tar.gz">http://nginx.org/download/nginx-1.4.2.tar.gz</a>tar xf pcre-8.33.tar.gztar xf zlib-1.2.8.tar.gz
#安装编译环境
apt-get install build-essential libtool -y
#创建nginx用户 所谓的unprivileged user
useradd -s /bin/false -r -M -d /nonexistent www
#开始编译安装
/configure --with-pcre=/usr/local/src/pcre-8.33 --with-zlib=/usr/local/src/zlib-1.2.8 --user=www --group=www \--with-http_stub_status_module --with-http_ssl_module --with-http_realip_modulemakemake install
#给文件夹授权
chown -R www:www /usr/local/nginx
#修改配置文件 vim nginx.conf
user www www;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {use epoll;worker_connections 65535;
}
http {include mime.types;default_type application/octet-stream;include /usr/local/nginx/conf/reverse-proxy.conf;sendfile on;keepalive_timeout 65;gzip on;client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户client_body_buffer_size 256k;client_header_timeout 3m;client_body_timeout 3m;send_timeout 3m;proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)proxy_send_timeout 300s;proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘proxy_ignore_client_abort on; #不允许代理端主动关闭连接server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
编辑反向代理服务器配置文件: vim /usr/local/nginx/conf/reverse-proxy.conf
server
{listen 80;server_name xxx123.tk;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.10.38:3000;}access_log logs/xxx123.tk_access.log;
}server
{listen 80;server_name xxx456.tk;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://192.168.10.40:80;}access_log logs/xxx456.tk_access.log;
}
然后重新加载nginx配置文件,使之修改生效,再把xxx123.tk域名指向公司静态IP,这样就成功的做到了在浏览器中输入xxx123.tk的时候访问的内网服务器192.168.10.38的3000端口,输入xxx456.tk访问192.168.10.40的80端口的作用。 如果想对后端机器做负载均衡,像下面这配置就可以把对nagios.xxx123.tk的请求分发给内网的131和132这两台机器做负载均衡了。
upstream monitor_server {server 192.168.0.131:80;server 192.168.0.132:80;
}server
{listen 80;server_name nagios.xxx123.tk;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://monitor_server;}access_log logs/nagios.xxx123.tk_access.log;
}
额,关于负载均衡和缓存就不多说了,这里只是要起到一个简单的“域名转发”功能。 另外,由于http请求最后都是由反向代理服务器传递给后段的机器,所以后端的机器原来的访问日志记录的访问IP都是反向代理服务器的IP。 要想能记录真实IP,需要修改后端机器的日志格式,这里假设后端也是一台nginx: 在后端配置文件里面加入这一段即可:
log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $HTTP_X_Forwarded_For';access_log logs/access.log access;
再看看原来日志的格式长什么样:
#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 logs/access.log main;
看出区别了吧 遇到的问题
  • 之前没配置下面这段,访问时候偶尔会出现504 gateway timeout,由于偶尔出现,所以不太好排查
proxy_connect_timeout 300s;proxy_read_timeout 300s;proxy_send_timeout 300s;proxy_buffer_size 64k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;proxy_ignore_client_abort on;
报错日志:
...upstream timed out (110: Connection timed out) while reading response header from upstream, client: ...(后面的省略)
从日志看来是连接超时了,网上一通乱查之后估计可能是后端服务器响应超时了,本着大胆假设,小心求证的原则,既然假设了错误原因就要做实验重现错误:那就调整代理超时参数,反过来把代理超时阀值设小(比如1ms)看会不会次次出现504。后来发现把proxy_read_timeout 这个参数设置成1ms的时候,每次访问都出现504。于是把这个参数调大,加入上面那段配置,解决问题了。 作者邮箱:790455803@qq.com,有问题可以直接右键作者,当然也可以加入我们ttlsa群单独私聊或者群里发提问。 站点:运维生存时间  网址: http://www.ttlsa.com/html/4208.html

转载于:https://my.oschina.net/766/blog/211538

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外国经典儿童读物合集pdf_帮助父母在线购买儿童读物–用户体验案例研究

外国经典儿童读物合集pdfTŤ As our first group project at GA, we needed to quickly learn how to use several online tools that helped our team of 4 collaborate and communicate while socially distant. Despite the rather extreme circumstances our team was stil…

Windows Azure Marketplace增加对六种语言和HTML5应用程序的支持

对于那些不熟悉Windows Azure Marketplace的人来说&#xff0c;它是一个供数据供应商和开发人员购买和销售数据集和应用程序的在线市场。 可以在世界上的26个国家使用Windows Azure Marketplace&#xff0c;它现在支持6种语言&#xff0c;包括日语、汉语、法语、德语、西班牙语…

如何优雅处理 async await 错误——解读小而美的 await-to-js 库

大家好&#xff0c;我是若川。持续组织了5个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。这是源码共读活动第…

同态加法_同态的Spotify

同态加法重点 (Top highlight)When neumorphism was predicted to be one of the top 2020 UI design trends, I wanted to give it a shot. Having said that, I wanted to explore a type that had not gone overboard, neumorphism in Dark Mode.当neumorphism预计为顶部202…

ubuntu清除无效的右键打开方式

为什么80%的码农都做不了架构师&#xff1f;>>> 今天安装了几个程序又将它们删除了之后发现了一个比较严重的后遗症&#xff0c;在相关文件右键打开方式中出现了许多实际已经不存在的文件打开程序名。想了多种方法去除&#xff0c;可是效果不佳&#xff0c;最终采用…

咖啡豆(JavaBean)•香

Sun公司对JavaBean的定义为:可以重复利用的软件组件&#xff0c;它在遵循JavaBean技术规范的基础上提供特定的功能&#xff0c;这些功能模块可以组成更大规模的应用系统。 到底什么是JavaBean? 先看一段代码&#xff1a; /** * author yong * */ public class Add { public st…

新一代的编译工具 SWC,97年小哥写的~

大家好&#xff0c;我是若川。持续组织了5个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。最近前端圈掀起了一…

开始学习jQuery和准备工作

<script>$(document).ready(function(){}); 首先&#xff0c;在页面顶部添加一行script元素&#xff0c;然后在下一行写上结束符。 浏览器会运行script里所有的Javascript&#xff0c;包括jQuery。 在你的script元素里&#xff0c;添加这段代码&#xff1a;$(document).r…

粉红噪音_粉红的常绿力量

粉红噪音I use Instagram. But I don’t use Instagram in the way that my daughters, who are 21 and 14, use Instagram. More to the point, Instagram doesn’t use me in quite the same way it uses my daughters.我使用Instagram。 但是&#xff0c;我不会像21岁和14岁…

Sql Server 中存储过程的output return的区别

看http://zxianf.blog.163.com/blog/static/301207012009114104124969/中片关于Sql Server中存储过程output和return值的区别 在里面有讲解&#xff0c;我在自己本机中测试的结果如下&#xff0c; 1&#xff1a;ReturnValue只能返回0,1,-1这样的数据&#xff0c;局限性很大 &am…

1个月增长15000 star,zx 库写shell脚本真不错~

大家好&#xff0c;我是若川。持续组织了5个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。今天来讨论一个牛逼…

灰色边框阴影_50种暗模式灰色阴影

灰色边框阴影If you’re an avid dark mode user like me, you’ll know that dark mode isn’t just about white text on black backgrounds. In a single app, a handful of shades of gray give the app some depth. And across various apps, the spectrum of gray become…

Android源代码下载

为什么80%的码农都做不了架构师&#xff1f;>>> Android代码使用git管理, 所以关于Android源码下载一般来说要安装git. 本文是讲述只使用Eclipse完成Android源码下载和关联. 下载Eclipse,目前最新版本是Juno,自带了EGit插件-->Eclipse Git插件 那么可以使用EGit…

关于nginx调转404错误页面

在server{}模块添加如下&#xff1a; error_page 404 /404.html; location /404.html { root /var/www/html/sina/; #“404目录地址” }转载于:https://www.cnblogs.com/alang85/archive/2012/03/01/404_error.html

尤雨溪:Vue 3 将成为新的默认版本

过完年&#xff0c;大年初七&#xff0c;Vue3 将成为默认版本&#xff0c;这时感觉我之前写的几篇文章都可以抽空更新一版了。尤雨溪推荐神器 ni &#xff0c;能替代 npm/yarn/pnpm &#xff1f;简单好用&#xff01;源码揭秘&#xff01;Vue 3.2 发布了&#xff0c;那尤雨溪是…

shell编程系列20--文本处理三剑客之awk常用选项

shell编程系列20--文本处理三剑客之awk常用选项awk选项总结选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号[rootlocalhost shell]# awk -v num2"$num1" -v var1"$var" BEGIN{print num2,var…

v-charts加载动画_加载动画-用户体验写作练习

v-charts加载动画Many new UX writers often struggle to find the balance between creativity and clarity. You can’t make everything fun/exciting/interesting as it can have an adverse effect on usability. But there are times when you can add a bit of flair.许…

linux 常用命令收集

关机&#xff1a;poweroff&#xff0c;shutdown -h now&#xff0c;init 0重启&#xff1a;reboot&#xff0c;shutdown -r now&#xff0c;init 6 关闭x-window&#xff1a;init 3启动x-window&#xff1a;init 5&#xff0c;start x1.终止命令&#xff1a;ctrlc 2.结束输入…

34岁回顾人生,也怕中年危机!

大家好&#xff0c;我是若川。持续组织了5个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。最近发生一件令人感…

蛋花花APP,APP开发这几点你要注意了

蛋花花君又来了&#xff0c;这次蛋花花君为大家分享的是APP开发过程中需要注意的几点。 1、用户体验 程序猿蛋花花觉得&#xff0c;APP开发是为客户来开发的&#xff0c;而不单单是为了老板&#xff0c;毕竟真正使用的是广大用户。APP的设计应该从用户的角度出发&#xff0c;提…