Apache 反向代理,Laravel获取用户真实IP
文章目錄
- Apache (測試能夠使用)
- 1. 激活加載remoteip模塊
- 2. 定義代理與服務
- 3. 配置Apache日志格式以使用X-Forwarded-For
- 4. 結論
- 5. 參考鏈接
- Nginx (未測試)
好多項目用到 前后端分離 結構,那這個時候就會涉及到反向代理的問題,OK ,那么在實際應用中,laravel 是如何獲取用戶真實的IP 地址呢? 下面就跟我一塊來了解一下吧!!!
Apache (測試能夠使用)
1. 激活加載remoteip模塊
remoteip模塊用于處理useragent,已識別的客戶端,將請求作為實際客戶端地址發起,而不是Apache可能正在接收的可能的負載均衡器,代理或其他前端服務器地址。
這意味著您的Apache Web服務器將覆蓋它作為原始使用者接收的客戶端IP地址,
開啟remoteip 模塊
vim apache2.conf 去掉 # LoadModule remoteip_module modules/mod_remoteip.so2. 定義代理與服務
編輯要修改的web 應用配置
<VirtualHost *:80>ServerAdmin xxxxDocumentRoot "xxxxxx"ServerName xxxxx.comErrorLog "logs/dev.com-error.log"CustomLog "logs/dev.com-access.log" commonProxyRequests OffProxyPass /api http://api.xxx.com/apiProxyPassReverse /api http://api.xxx.com/apiRemoteIPHeader X-Forwarded-For # 添加的內容RemoteIPTrustedProxy 192.168.1.10 # 添加的內容 </VirtualHost>其中,
- 添加任意數量的代理定義,以便在使用多個服務或負載平衡器時為來自這些代理的流量配置XFF標頭的使用。添加多個代理的示例
- 請注意,如果最終用戶在內部網絡中具有IP,則上面使用的RemoteIPTrustedProxy將不起作用。要接受內部網絡IP(如果它符合您的環境需求),您還需要使用以下命令在配置文件中定義代理:
3. 配置Apache日志格式以使用X-Forwarded-For
# vim apache2.conf
在文件中搜索LogFormat行。Apache的標準日志記錄格式如下所示,您可能會在文件中看到類似的內容。
此格式使用%h字段捕獲標頭,默認情況下,我們將在示例中使用代理地址。由于我們希望在日志記錄中使用原始客戶端IP地址,因此您必須將LogFormat定義修改為如下所示:
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined請注意我們如何用字段%a替換原始標題字段位置(%h)。這是X-Forwarded-For字段,負責顯示正確的始發客戶端IP地址。只要您具有日志記錄格式定義,請將%h替換為%a以使用X-Forwarded-For。
Apache具有高度可配置性,您可以通過播放XFF標頭字段的位置,進一步修改日志格式,直到它最適合您的格局和Web應用程序。如果對最終格式感到滿意,請保存并退出文件。接下來,您需要重新加載Apache才能使更改生效。
在重新加載服務器之前,您可以使用Apache命令apache2ctl驗證配置中是否有錯誤:
# apache2ctl configtest
如果上一步沒有輸出錯誤,您可以安全地重新加載到新配置以開始使用XFF。使用service命令重新啟動Apache Web服務器:
# service apache2 restart
4. 結論
一旦您的Apache Web服務器重新啟動,它將開始記錄正確的客戶IP地址信息,而不是您可能在您的環境中使用的任何中間人服務。您可以輕松地知道,如果您使用代理或其他類似服務,您的客戶信息數據將100%保留。如果您發現它有用,請與您的朋友分享本教程!
5. 參考鏈接
Apache remoteip 模塊 說明
如何在Apache Web Server中獲取X-Forwarded-For IP地址
Nginx (未測試)
https://www.itread01.com/content/1543308020.html
總結
以上是生活随笔為你收集整理的Apache 反向代理,Laravel获取用户真实IP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MySQL】mysql 远程连接111
- 下一篇: 【HTTPS】Let's Encrypt