nginx反向代理
A. nginx反向代理tomcat,不能完全訪問,速度也很慢
問題解決了,我也是剛學nginx,你這個問題我也碰到了。我是頁面引用文件使用request獲取當前環境地址,你可以調試下,引用的文件全部沒找到。
location/{
proxy_passhttp://local_tomcat;
#nginx非80埠處理
proxy_set_headerHost$host:$server_port;
#獲取真實IP
proxy_set_headerX-Real-IP$remote_addr;
#獲取代理者的真實ip
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
#解決getScheme,isSecure,sendRedirect
proxy_set_headerX-Forwarded-Scheme$scheme;
client_max_body_size10m;
client_body_buffer_size128k;
#proxy_connect_timeout90;
#proxy_send_timeout90;
#proxy_read_timeout90;
proxy_buffer_size4k;
proxy_buffers432k;
proxy_busy_buffers_size64k;
proxy_temp_file_write_size64k;
}
把上面的proxy_pass修改成你自己的,其他的拷貝到你的nginx.conf中,就可以了。
B. 求nginx反向代理配置
沒辦法做這樣的反向代理。
除非是
http://10.80.12.196:8080/8080/ -> http://10.80.12.198/8080/
http://10.80.12.196:8000/8000/ -> http://10.80.12.198/8000/
如果是這樣的話,配置是這樣的
location /8080 {
proxy_pass http://10.80.12.196:8080/;
proxy_redirect off;
}
location /8000 {
proxy_pass http://10.80.12.196:8000/;
proxy_redirect off;
}
proxy的其它參數就自己設置了,可以參考下
C. 為什麼要用Nginx反向代理
一般來說公網延遲高,客戶端與nginx之間的請求連接走公網,nginx先把這些請求緩存住,等這些請求數據全部完成之後nginx再向內網伺服器請求,降低公網網路延遲成本,同時也降低一個連接佔用服務端程序的時間。
原因:因為tcp不一定一次就能把全部數據傳輸完畢,所以一個連接可能需要等待很久才能把所有需要的數據都傳輸完畢,而這樣的空閑連接如果都直接連
接到伺服器上的話,會加重伺服器負擔,而nginx在這方面做了很大的優化,可以承載更多的連接,空閑連接也不會占據太多內存,所以nginx作為反向代
理能降低上游伺服器的負載。
D. 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;
}
}
E. 路由怎麼設置nginx反向代理
如已經安裝好了nginx相關的環境,現僅展示相關的反向代理的配置。默認nginx.confi的配置,可能與下面的圖會有不同,重要的是後面的配置。
已經安裝好了nginx相關的環境,現僅展示相關的反向代理的配置。默認nginx.confi的配置,可能與下面的圖會有不同,重要的是後面的配置。
-----注意查找nginx的默認配置文件,nginx.conf文件
修改設置代理
在nginx.conf配置中添加下圖相關的配置,以線圈中的,其中的路徑要以實際的配置文件路徑為主
查看上面的配置中有引用/usr/local/u-mail/config/nginx/reverse-proxy.conf 配置文件.
檢查測試配置
配置完後,使用nginx –t的命令測試一下,配置是否正確.是否有提示相關的錯誤.這個服務的路徑要以具體的為主.
如配置有問題,按相關的提示進行更改.對比上面的配置信息進行查看.然後再重啟下nginx的服務,使其載入剛剛的配置.
7
測試效果
再訪問測試下相關的站點是否正常.是否會跳轉到對應網站
8
除了nginx映射之外
我們還可以通過使用設置域名解析URL跳轉來做(只有部分域名解析服務商才提供此項服務)
F. 為什麼要用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程序和數據,需要考慮兩者的數據同步。
G. nginx反向代理root 一定要配置嗎
nginx反向代理配置實例(前nginx+後apache)
我就拿我現在這個站的環境給大家看看..
如果是一台普通vps或者是獨立伺服器 ,,,首先我們要乾的就是裝環境和配置防火牆了..
首先我們配置下防火牆吧,
[[email protected] ~]# vim /etc/sysconfig/iptables
:wq! 保存退出
大家肯定會問 88 89 埠是幹嘛的,,不用問了,等會看就知道了...
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
還有一件事需要做的就是selinux
可能大家會覺得我啰嗦.....錯...這些 我主要是對新手來講的,,,, 如果你是老手你跳到最下面看的我配置文件就行...
[[email protected] ~]# vim /etc/sysconfig/selinux 打開selinux 配置文件
在裡面把所有的都注釋掉新增一個
SELINUX=disabled
:wq! 保存退出
重啟 伺服器[[email protected] ~]# reboot
等
伺服器重啟完畢之後 我們就開始安裝環境了.. 注意,,我給大家介紹的全部是yum 源安裝 .喜歡編譯的安裝的自己
在編譯安裝之前需安裝編譯需要的依賴包以及 gcc 等等那些工具...在此我提醒大家.很多人 的伺服器環境是最小化安裝版, 最小化安裝版是不適合
編譯安裝環境的..如果是的話請手動用 yum 安裝所需要的編譯環境.. 不說了 咱們開始
首先安裝nginx吧 這種方法是教大家安裝nginx 最新版本的..
[[email protected] ~]# vim /etc/yum.repos.d/CentOS-Base.repo
在最後一行加上如下內容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
:wq! 保存退出
下面開始安裝nginx了
[[email protected] ~]# yum install nginx
提示按 y
安裝 mysql
[[email protected] ~]# yum install mysql-server
提示按 y
安裝php
[[email protected] ~]# yum install php -y
提示按 y
安裝php的擴展插件
[[email protected]
~]# yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear
php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash
libmcrypt libmcrypt-devel
好了.以上就是 lnmp 環境的完整 安裝了.
接下來我們需要把 /etc/nginx/ 目錄下面的nginx.conf 這個裡面的內容全部修改
最好是先把默認的nginx.conf 這個配置文件備份下吧.
[[email protected] ~]#cd /etc/nginx
備份重新命名為 nginx.confbak
接下來新建立一個nginx.conf 配置文件
輸入一下內容:
user nginx nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server
{
listen 80;
server_name www.51buyhost.com 51buyhost.com;
index index.html index.htm index.php;
root /data/51buyhost;
location / {
try_files $uri @apache;
}
location @apache {
internal;
proxy_pass http://127.0.0.1:88;
#include proxy.conf;
}
location ~ .*.(php|php5)?$
{
proxy_pass http://127.0.0.1:88;
# include proxy.conf;
}
location /status {
stub_status on;
access_log off;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off;
expires 30d;
}
location ~ .*.(js|css)?$
{
access_log off;
expires 12h;
}
access_log /data/log/51buyhost/access.log;
}
include /etc/nginx/conf.d/*.conf;
H. 使用nginx反向代理到谷歌可行嗎
如果nginx可以訪問谷歌,則可以通過nginx反向代理到谷歌
但注意一點,如果短時間內,大量不同的訪客通過同一個IP地址(nginx的IP)訪問谷歌,可能會被谷歌認為是非法訪問,要求輸入驗證碼才可繼續訪問,可能會影響體驗
I. nginx能實現soket反向代理嗎
nginx能實來現soket反向代理
通過這個模塊,自代理後端其它協議應用,如mysql, nosql之類的
比如用Node.JS寫了一些TCP服務,那麼Nginx就可以給這些Node.JS做TCP代理,比如開啟多個Node.JS監聽不同的埠,經過Nginx TCP代理到upstream實現負載均衡,Nginx比Haproxy的優勢還在於Nginx能夠提供HTTP/HTTPS服務,可以處理靜態資源,或者把一些其他請求交給其他語言來處理,比如可以把一些輸出HTML頁面的請求fastcgi_pass給PHP-FPM處理,總而言之,Nginx更像是在做一個可擴展的Web開發系統.另外,Nginx已經支持WebSocket反向代理,而移動瀏覽器對HTTP上的全雙工通信WebSocket的支持還是不錯的,只是還沒有足夠成熟.
J. nginx 反向代理支持域名嗎
你是想用nginx反向代理轉發域名嗎?
是不是為了去除域名的埠,所以想進行反向代理的
可以看看這文章,無論你是用的是nginx還是其他web伺服器,都可以一鍵轉發!
需要給多少個域名去掉埠號,就輸入多少個域名吧。
你可以看看這個http://jingyan..com/article/03b2f78c0b33e05ea237ae0a.html