搭建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.pswp.cn/news/274991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274991.shtml
英文地址,請注明出處:http://en.pswp.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;提…