nginx代理
㈠ 為什麼要用nginx來做反向代理
nginx 這個輕量級、高性能的 web server 主要可以干兩件事情:
〉直接作為http server(代替apache,對PHP需要處理器支持);
〉另外一個功能就是作為反向代理伺服器實現負載均衡
以下我們就來舉例說明如何使用 nginx 實現負載均衡。因為nginx在處理並發方面的優勢,現在這個應用非常常見。當然了Apache的 mod_proxy和mod_cache結合使用也可以實現對多台app server的反向代理和負載均衡,但是在並發處理方面apache還是沒有 nginx擅長。
1)環境:
a. 我們本地是Windows系統,然後使用VirutalBox安裝一個虛擬的Linux系統。
在本地的Windows系統上分別安裝nginx(偵聽8080埠)和apache(偵聽80埠)。在虛擬的Linux系統上安裝apache(偵聽80埠)。
這樣我們相當於擁有了1台nginx在前端作為反向代理伺服器;後面有2台apache作為應用程序伺服器(可以看作是小型的server cluster。;-) );
b. nginx用來作為反向代理伺服器,放置到兩台apache之前,作為用戶訪問的入口;
nginx僅僅處理靜態頁面,動態的頁面(php請求)統統都交付給後台的兩台apache來處理。
也就是說,可以把我們網站的靜態頁面或者文件放置到nginx的目錄下;動態的頁面和資料庫訪問都保留到後台的apache伺服器上。
c. 如下介紹兩種方法實現server cluster的負載均衡。
我們假設前端nginx(為127.0.0.1:80)僅僅包含一個靜態頁面index.html;
後台的兩個apache伺服器(分別為localhost:80和158.37.70.143:80),一台根目錄放置phpMyAdmin文件夾和test.php(裡面測試代碼為print 「server1「;),另一台根目錄僅僅放置一個test.php(裡面測試代碼為 print 「server2「;)。
2)針對不同請求 的負載均衡:
a. 在最簡單地構建反向代理的時候 (nginx僅僅處理靜態不處理動態內容,動態內容交給後台的apache server來處理),我們具體的設置為:在nginx.conf中修改:
復制代碼 代碼如下:
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
〉 這樣當客戶端訪問localhost:8080/index.html的時候,前端的nginx會自動進行響應;
〉當用戶訪問localhost:8080/test.php的時候(這個時候nginx目錄下根本就沒有該文件),但是通過上面的設置 location ~ \.php$(表示正則表達式匹配以.php結尾的文件,詳情參看location是如何定義和匹配的 http://wiki.nginx.org/NginxHttpCoreMole) ,nginx伺服器會自動pass給 158.37.70.143的apache伺服器了。該伺服器下的test.php就會被自動解析,然後將html的結果頁面返回給nginx,然後 nginx進行顯示(如果nginx使用memcached模塊或者squid還可以支持緩存),輸出結果為列印server2。
如上是最為簡單的使用nginx做為反向代理伺服器的例子;
b. 我們現在對如上例子進行擴展,使其支持如上的兩台伺服器。
我們設置nginx.conf的server模塊部分,將對應部分修改為:
復制代碼 代碼如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127.0.0.1:80 ;
}
location ~ \.php$ {
proxy_pass 158.37.70.143:80 ;
}
上面第一個部分location ^~ /phpMyAdmin/,表示不使用正則表達式匹配(^~),而是直接匹配,也就是如果客戶端訪問的 URL是以http://localhost:8080/phpMyAdmin/ 開頭的話(本地的nginx目錄下根本沒有phpMyAdmin目錄),nginx會自動pass到127.0.0.1:80 的Apache伺服器,該伺服器對phpMyAdmin目錄下的頁面進行解析,然後將結果發送給nginx,後者顯示;
如果客戶端訪問URL是http://localhost/test.php 的話,則會被pass到158.37.70.143:80 的apache進行處理。
因此綜上,我們實現了針對不同請求的負載均衡。
〉如果用戶訪問靜態頁面index.html,最前端的nginx直接進行響應;
〉如果用戶訪問test.php頁面的話,158.37.70.143:80 的Apache進行響應;
〉如果用戶訪問目錄phpMyAdmin下的頁面的話,127.0.0.1:80 的Apache進行響應;
3)訪問同一頁面 的負載均衡:
即用戶訪問http://localhost:8080/test.php 這個同一頁面的時候,我們實現兩台伺服器的負載均衡 (實際情況中,這兩個伺服器上的數據要求同步一致,這里我們分別定義了列印server1和server2是為了進行辨認區別)。
a. 現在我們的情況是在windows下nginx是localhost偵聽8080埠;
兩台apache,一台是127.0.0.1:80(包含test.php頁面但是列印server1),另一台是虛擬機的158.37.70.143:80(包含test.php頁面但是列印server2)。
b. 因此重新配置nginx.conf為:
〉首先在nginx的配置文件nginx.conf的http模塊中添加,伺服器集群server cluster(我們這里是兩台)的定義:
復制代碼 代碼如下:
upstream myCluster {
server 127.0.0.1:80 ;
server 158.37.70.143:80 ;
}
表示這個server cluster包含2台伺服器
〉然後在server模塊中定義,負載均衡:
復制代碼 代碼如下:
location ~ \.php$ {
proxy_pass http://myCluster ; #這里的名字和上面的cluster的名字相同
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;
}
這樣的話,如果訪問http://localhost:8080/test.php 頁面的話,nginx目錄下根本沒有該文件,但是它會自動將其pass到myCluster定義的服務區機群中,分別由127.0.0.1:80;或者158.37.70.143:80;來做處理。
上面在定義upstream的時候每個server之後沒有定義權重,表示兩者均衡;如果希望某個更多響應的話例如:
復制代碼 代碼如下:
upstream myCluster {
server 127.0.0.1:80 weight=5;
server 158.37.70.143:80 ;
}
這樣表示5/6的幾率訪問第一個server,1/6訪問第二個。另外還可以定義max_fails和fail_timeout等參數。
綜上,我們使用nginx的反向代理伺服器reverse proxy server的功能,將其布置到多台apache server的前端。
nginx僅僅用來處理靜態頁面響應和動態請求的代理pass,後台的apache server作為app server來對前台pass過來的動態頁面進行處理並返回給nginx。
通過以上的架構,我們可以實現nginx和多台apache構成的機群cluster的負載均衡。
兩種均衡:
1)可以在nginx中定義訪問不同的內容,代理到不同的後台server; 如上例子中的訪問phpMyAdmin目錄代理到第一台server上;訪問test.php代理到第二台server上;
2)可以在nginx中定義訪問同一頁面,均衡 (當然如果伺服器性能不同可以定義權重來均衡)地代理到不同的後台server上。 如上的例子訪問test.php頁面,會均衡地代理到server1或者server2上。
實際應用中,server1和server2上分別保留相同的app程序和數據,需要考慮兩者的數據同步。
㈡ 用nginx配置了郵件代理 怎樣向nginx發送郵件
首先你要理解一下個結構的關系:
1、mail server,如sendmail,是用來發送郵件和接收郵件的,即pop和smtp功能。
2、nginx本身是不能發送和接收郵件的,他只是一個中轉機構,代理作用。
你要做的:
1、把後端的mail server配置好,能收發郵件以及管理。
2、配置好nginx的代理功能,把郵件的出入都設置一下。確保nginx和mail之間能正常通訊
3、把域名pop.abc.com和smtp.abc.com的A記錄指向nginx的地址。
4、等域名生效後,用foxmail之類發送和收取郵件看看,地址用域名pop和smtp那個。
5、其它spf設置也設置一下。
希望對你有幫助。
㈢ nginx 反向代理支持域名嗎
你是想用nginx反向代理轉發域名嗎?
是不是為了去除域名的埠,所以想進行反向代理的
可以看看這文章,無論你是用的是nginx還是其他web伺服器,都可以一鍵轉發!
需要給多少個域名去掉埠號,就輸入多少個域名吧。
你可以看看這個http://jingyan..com/article/03b2f78c0b33e05ea237ae0a.html
㈣ Nginx能否代理Oracle 1521埠進行數據轉發
解決了嗎? 我也遇到這個問題, 這個代碼1524的可以,1525就不行
worker_processesauto;
#error_log/usr/local/nginx/logs/error.loginfo;
events{
worker_connections1024;
}
stream{
upstreamorarac{
hash$remote_addrconsistent;
server172.30.1.28:1521;
#server192.168.137.131:1521;
}
server{
listen1525;
proxy_passorarac;
}
upstreamoraracdev{
server172.30.1.234:1524;
#server192.168.137.131:1521;
}
server{
listen1524so_keepalive=on;
proxy_passoraracdev;
}
}
㈤ 怎麼測試nginx反向代理
代理機器:192.168.163.128
後端機器:192.168.163.129和192.168.163.131
以上三台機器都搭建了nginx
1、修改index.html,區別後端機器
192.168.163.129和192.168.163.131上的/usr/local/nginx/html/index.html中,修改Welcome to nginx 為Welcome to nginx129和Welcome to nginx131以作這兩台機器的區別
2、代理機器的配置
修改nginx.conf文件:
[html]view plain
http{
includemime.types;
default_typeapplication/octet-stream;
include/usr/local/nginx/conf/reverse-proxy.conf;
#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
#'$status$body_bytes_sent"$http_referer"'
#'"$http_user_agent""$http_x_forwarded_for"';
#access_loglogs/access.logmain;
sendfileon;
#tcp_nopushon;
#keepalive_timeout0;
keepalive_timeout65;
gzipon;
client_max_body_size50m;#緩沖區代理緩沖用戶端請求的最大位元組數,可以理解為保存到本地再傳給用戶
client_body_buffer_size256k;
client_header_timeout3m;
client_body_timeout3m;
send_timeout3m;
proxy_connect_timeout300s;#nginx跟後端伺服器連接超時時間(代理連接超時)
proxy_read_timeout300s;#連接成功後,後端伺服器響應時間(代理接收超時)
proxy_send_timeout300s;
proxy_buffer_size64k;#設置代理伺服器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffers432k;#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置
proxy_busy_buffers_size64k;#高負荷下緩沖大小(proxy_buffers*2)
proxy_temp_file_write_size64k;#設定緩存文件夾大小,大於這個值,將從upstream伺服器傳遞請求,而不緩沖到磁碟
proxy_ignore_client_aborton;#不允許代理端主動關閉連接
#gzipon;
server{
listen80;
server_namelocalhost;
#charsetkoi8-r;
#access_loglogs/host.access.logmain;
location/{
roothtml;
indexindex.htmlindex.htm;
}
#error_page404/404.html;
#/50x.html
#
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
server
{
listen80;
server_name123.tk;
location/{
proxy_redirectoff;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_passhttp://192.168.163.129:80;
}
access_loglogs/123.tk_access.log;
}
server
{
listen80;
server_name456.tk;
location/{
proxy_redirectoff;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_passhttp://192.168.163.131:80;
}
access_loglogs/456.tk_access.log;
}
192.168.163.129123.tk
192.168.163.131456.tk
3、添加conf/reverse-proxy.conf文件
[html]view plain
4、重載nginx
kill -HUP `cat /usr/local/nginx/nginx.pid`
5、修改訪問機器的hosts
在要訪問這些域名的機器上修改hosts文件,添加:
[html]view plain
[html]view plain
6、測試訪問
㈥ nginx反向代理為什麼不成功
不成功的具體體現是什麼?頁面能正常顯示嗎,還是報400錯或者其他錯,被代理的地址直接訪問有問題嗎?
確定nginx 裝好了嗎?localhost能訪問nginx的歡迎頁面嗎?
原始nginx.conf配置文件只需要改一下就可以實現反向代理
server{
listen 80;
server_name localhost;
location / {
#代理地址
proxy_pass http://192.168.1.1:8080;
}
}
配置完以後瀏覽器直接訪問 localhost
確認80埠沒有被防火牆限制,查看防火牆配置文件 vi /etc/sysconfig/iptables
如果沒有80埠,就把 22 埠的配置復制一份,放在22埠下面一行,
修改好後重啟防火牆 service iptables restart
再試試,純手打。。。
負載均衡配置
upstream servers{
server 192.168.1.251:8080;
server 192.168.1.251:8081;
server 192.168.1.251:8082;
}
server {
listen 80;
server_name localhost;
location / {
#反向代理的地址
proxy_pass http://servers;
}
}
㈦ 通過nginx代理無法上網
埠不應該設置為8888,因為http協議是80埠,改成下面的配置試試。
server{
resolver10.202.72.118;
resolver_timeout10s;
listen80;
location/{
proxy_pass$scheme://$host$request_uri;
proxy_set_headerHost$http_host;
}
}
㈧ Nginx郵件代理如何配置mail 進行收發郵件
mail{
//郵件認證伺服器的訪問URL
auth_httpIP:PORT/auth.php;
//當透傳上,下游間的TCP流時,每個請求所使用的內存緩沖區大小
proxy_buffer4k;
server{
/*對於POP3協議,通常都是監聽110埠。POP3協議接收初始客戶端請求的緩沖區固定為128位元組,配置文件中無法設置*/
listen110;
protocolpop3;
proxyon;
}
server{
//對於IMAP,通常都是監聽143埠
listen143;
protocolimap;
//設置接收初始客戶端請求的緩沖區大小
imap_client_buffer4k;
proxyon;
}
server{
//對於SMTP,通常都是監聽25埠
listen25;
protocolsmtp;
proxyon;
//設置接收初始客戶端請求的緩沖區大小
smtp_client_buffer4k;
}
}
此配置來源於網路http://54rd.net/html/2015/webserver_0217/60.html,更詳細配置可前往閱讀
㈨ 想用nginx配置一個最簡單的代理轉發的功能,請問怎麼實現
伺服器配置在192.168.253.119,在http下添加個server
server{
listen 8080;#監聽埠,根據你的需要進行修改(建議改為80)
resolver 114.114.114.114;#dns伺服器,你這個不加應該也行,因為只用IP的
access_log logs/proxy.access.log proxy buffer=1024k;#日誌路徑,可以不寫
location ~ ^/web/service\.aspx$ {
proxy_pass http://192.168.253.129$request_uri;
}
㈩ nginx如何代理到自己的服務
首先使用curl檢查你要代理的服務是否已經通了,curl http://127.0.0.1:8000/api/get/info/ping,返回pong就沒問題,沒有就在nginx
添加個access log和errorlog,訪問然後查看日誌排查原因。