解決使用了nginx獲取IP地址都是127.0.0.1 的問(wèn)題
獲取ip工具
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
/**
* IP地址
*
* @date 2020年3月6日 下午12:57:02
*/
@Slf4j
public class IPUtils {
/**
* 獲取IP地址
*
* 使用Nginx等反向代理軟件, 則不能通過(guò)request.getRemoteAddr()獲取IP地址
* 如果使用了多級(jí)反向代理的話,X-Forwarded-For的值并不止一個(gè),而是一串IP地址,X-Forwarded-For中第一個(gè)非unknown的有效IP字符串,則為真實(shí)IP地址
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} catch (Exception e) {
log.error("IPUtils ERROR ", e);
}
//使用代理,則獲取第一個(gè)IP地址
if(StringUtils.isEmpty(ip) && ip.length() > 15) {
if(ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
return ip;
}
}
如果你使用了nginx 則獲取到的ip都會(huì)是127.0.0.1
在代理中加入如下配置proxy_set_header x-forwarded-for $remote_addr;
server {
listen 80;
server_name api.qimen.pro;
# 服務(wù)器文件上傳大小限制
client_max_body_size 10M;
location / {
proxy_pass http://gymserver;
proxy_set_header x-forwarded-for $remote_addr;
}
}
到此這篇關(guān)于解決使用了nginx獲取IP地址都是127.0.0.1 的問(wèn)題的文章就介紹到這了,更多相關(guān)nginx獲取IP地址問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx對(duì)http請(qǐng)求處理的各個(gè)階段詳析
這篇文章主要給大家介紹了關(guān)于nginx對(duì)http請(qǐng)求處理的各個(gè)階段分析的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
nginx 如何實(shí)現(xiàn)讀寫(xiě)限流的方法
這篇文章主要介紹了nginx 如何實(shí)現(xiàn)讀寫(xiě)限流的方法的相關(guān)資料,這里提供實(shí)例代碼及如何配置,需要的朋友可以參考下2016-12-12
在Nginx中配置image filter模塊來(lái)實(shí)現(xiàn)動(dòng)態(tài)生成縮略圖
這篇文章主要介紹了在Nginx中配置image filter模塊來(lái)實(shí)現(xiàn)動(dòng)態(tài)生成縮略圖的方法,包括縮略圖尺寸的設(shè)置等方面的介紹,需要的朋友可以參考下2015-12-12
Nginx設(shè)置成服務(wù)并開(kāi)機(jī)自動(dòng)啟動(dòng)的配置
Nginx?是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),接下來(lái)通過(guò)本文給大家介紹Nginx設(shè)置成服務(wù)并開(kāi)機(jī)自動(dòng)啟動(dòng)的配置,需要的朋友可以參考下2022-01-01
nginx?proxy_pass轉(zhuǎn)發(fā)規(guī)則解讀
這篇文章主要介紹了nginx?proxy_pass轉(zhuǎn)發(fā)規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
解決nginx+lua搭建文件上傳下載服務(wù)問(wèn)題
這篇文章主要介紹了nginx+lua搭建文件上傳下載服務(wù),涉及到nginx安裝配置方法,本文通過(guò)代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-12-12
WordPress與Drupal的Nginx配置rewrite重寫(xiě)規(guī)則示例
這篇文章主要介紹了WordPress與Drupal的Nginx配置重寫(xiě)規(guī)則示例,文中介紹的rewrite寫(xiě)法簡(jiǎn)單而突出配置重點(diǎn),需要的朋友可以參考下2016-01-01
一次nginx 504 Gateway Time-out錯(cuò)誤排查、解決記錄
這篇文章主要介紹了一次nginx 504 Gateway Time-out錯(cuò)誤排查、解決記錄,經(jīng)過(guò)反復(fù)檢查,發(fā)現(xiàn)造成這個(gè)問(wèn)題的原因就是PHP的CURL沒(méi)有設(shè)置超時(shí)時(shí)間,解決辦法只要設(shè)置超時(shí)時(shí)間或者修改一下nginx的配置即可解決,需要的朋友可以參考下2014-05-05

