zarro 發表於 2023-8-9 14:14:08

关于x3.5版本获取真实IP

升级了论坛3.5版本,发现IP出现问题了;弄了两天,才弄好;<br /><br />论坛自身是apache + php 5.6 的配置;<br />前面还有nginx代理; <br />正确配置如下;<br />1. 放开安全限制,ip接收其他参数头;<br />config/config_global.php<br /><br /><ol><li>$_config['security']['onlyremoteaddr'] = 0; //默认为1,表示只接受remote addr参数头;</ol>2. 修改ip相关配置参数;<br /><ol><li>$_config['ipgetter']['setting'] = 'header';<br /><li>$_config['ipgetter']['header']['header'] = 'HTTP_X_REAL_IP'; </ol><br /><br />3. nginx配置<br /><ol><li>&nbsp;&nbsp;location / {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;client_max_body_size 1000m;<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;proxy_pass&nbsp; &nbsp;&nbsp; &nbsp;http://10.1.9.5:8080;<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;proxy_set_header Host $host:$server_port; //论坛非标准端口,代理时需要添加这个东东;<br /><li>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header X-REAL-IP $remote_addr;<br /><li>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br /><li>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</ol>4. 测试文件<br /><br /><ol><li>&lt;?php<br /><li>class ip_getter_header {<br /><li>&nbsp; &nbsp; public static function get($s) {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (empty($s['header'])) {<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return $_SERVER['REMOTE_ADDR'];<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;$ip = isset($_SERVER[$s['header']]) ? $_SERVER[$s['header']] : $_SERVER['REMOTE_ADDR'];<br /><li><br /><li>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return $ip;<br /><li>&nbsp; &nbsp; }<br /><li>}<br /><li><br /><li>foreach ($_SERVER as $key =&gt; $value) {<br /><li>&nbsp; &nbsp; echo &quot;$key: $value&lt;br&gt;&quot;;<br /><li>}<br /><li><br /><li>$customHeader = 'aaaaa';<br /><li>$ip = ip_getter_header::get(['header' =&gt; $customHeader]);<br /><li>echo &quot;&lt;Br&gt;&lt;Br&gt;Client IP Address: &quot; . $ip;<br /><li><br /><li>$customHeader2 = 'HTTP_AAAAA';<br /><li>$ip2 = ip_getter_header::get(['header' =&gt; $customHeader2]);<br /><li>echo &quot;&lt;Br&gt;Client IP Address2: &quot; . $ip2;<br /><li>?&gt;<br /><li></ol><br /><br /><br />论坛<em>, </em>IP<em>, </em>配置<em>, </em>config<em>, </em>升级

专家 發表於 2023-8-10 05:31:31

你既然会改Nginx了,何不直接在Apache上接收Nginx传过来的ip呢?那样效果更好,也不用配置Discuz了,还能保证服务器log里的ip也没有错。<br />另外如果要改Discuz,需要同时修改Discuz本体和UCenter(如果你用的不是独立模式),方法详见https://www.dismall.com/thread-14866-1-1.html

专家 發表於 2023-8-10 05:32:40

上一条回复里的链接给错了,是这个:https://www.dismall.com/thread-15034-1-1.html

zarro 發表於 2023-8-10 14:00:45

大神啊,我才搜索到你的帖子啊,NB!!! <br />之前搜索到的是1314那个人发的。 测试发现不对,因为我不会编程,没了解过php,不知道变量会被替换。<br />再次请教一下apache如何接受nginx的传参,是直接赋值吗?还是咋地。通常做法都是把ip新头一直传下去,这个我知道。
頁: [1]
查看完整版本: 关于x3.5版本获取真实IP