反向代理伺服器地址
1. 如何取得反向代理的真實ip
問題引出:
<hr/>
在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了 Apache,Nagix等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用 request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或 192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端 IP地址和原來客戶端請求的伺服器地址。
舉例來說,當我們訪問口碑網首頁hangzhou.jsp時,其實並不是我們瀏覽器真正訪問到了伺服器上的hangzhou.jsp 文件,而是先由代理伺服器Nagix去訪問hagnzhou.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問hangzhou.jsp的,所以hangzhou.jsp中通過 request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
<hr/>
獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
<hr/>
獲得客戶端真實IP地址的方法二
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
<hr/>
2. nginx伺服器有什麼作用以及什麼是反向代理
一:Nginx作為正向代理伺服器:
1.正向代理:代理(proxy)服務也可以稱為是正向代理,指的是將伺服器部署在公司的網關,代理公司內部員工上外網的請求,可以起到一定的安全作用和管理限製作用,正向代理不支持從外網向內網訪問資源,一般很少用,經本人測試,效果也不好,有很多頁面打不開,在網路搜索的頁面也無法返回。
21:proxy_ssl_session_reuse:配置是否基於SSL協議與後端伺服器建立連接,如下:
proxy_ssl_session_reuse on | off;
3. nginx做反向代理負載均衡 Java怎麼獲取後端伺服器獲取用戶IP
首先,在前端nginx上需要做如下配置:
location /
proxy_set_hearder host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
};
nginx會在把請求轉向後台real-server前把http報頭中的ip地址進行替換;這樣操作完成後,real-server也需要做一些操作;
public class ClientIPUtils {
/**
* 在很多應用下都可能有需要將用戶的真實IP記錄下來,這時就要獲得用戶的真實IP地址,在JSP里,獲取客戶端的IP地
* 址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等
* 反向代理軟體就不能獲取到客戶端的真實IP地址了。
* 但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端IP地址和原來客戶端請求的伺服器地址。
* @param request
* @return
*/
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
//String ip = request.getHeader("X-real-ip");
logger.debug("x-forwarded-for = {}", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
logger.debug("Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
logger.debug("WL-Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
logger.debug("RemoteAddr-IP = {}", ip);
}
if(StringUtils.isNotBlank(ip)) {
ip = ip.split(",")[0];
}
return ip;
}
}
4. 反向代理主機ip變了
使用反向代理增加了伺服器負擔。訪問量大時,伺服器容易崩潰。
原理:若要求數據,而不是直接要求介面伺服器,而是要求自己的網路伺服器,就不會有跨域問題。
反向代理方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。
5. 如何取得反向代理的真實IP
取得反向代理的真實IP的方法有兩種:
一,public String getRemortIP(HttpServletRequest request)
if (request.getHeader("x-forwarded-for") == null)
return request.getRemoteAddr();
return request.getHeader("x-forwarded-for")。
二,
public String getIpAddr(HttpServletRequest request)
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP")。
6. 誰能告訴我什麼是反向代理
是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。
比如你現在想找人聊天,這時候你撥通了聯通客服,聯通的總機隨機給你分配一個客服給你。這時候你客服聊了起來,問了問她很多;
此時聯通總機充當的角色就是反向代理,你只知道和客服接通並聊了起來,具體為什麼會接通這個客服,怎麼接通的,你並不知道。
(6)反向代理伺服器地址擴展閱讀:
反向代理方式和包過濾方式或普通代理方式並無沖突,因此可以在防火牆設備中同時使用這兩種方式。
其中反向代理用於外部網路訪問內部網路時使用,正向代理或包過濾方式用於拒絕其他外部訪問方式並提供內部網路對外部網路的訪問能力。因此可以結合這些方式提供最佳的安全訪問方式。
7. nginx反向代理後丟失origin地址
可能是因為伺服器使用的不是80埠。
當直接代理到tomcat服務的時候,會將客戶發送過來的原始ip給覆蓋了,所以我們需要通過proxy_set_header來設定原始ip。
proxy_set_headerX-real-ip$remote_addr;指定ip地址為『X-real-ip』欄位,然後通過request、getHeader(「X-real-ip」)來獲取。
8. 如何使用nginx設置反向代理
修改部署目錄下conf子目錄的nginx.conf文件(如nginx-1.5.13conf
ginx.conf)內容,可調整相關配置。
反向代理配置示例:
location/{
#設置主機頭和客戶端真實地址,以便伺服器獲取客戶端真實IP
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
#禁用緩存
proxy_bufferingoff;
#設置反向代理的地址
proxy_passhttp://192.168.1.1;
}
代理地址根據實際情況修改。