分类:Linux
关于Linux的各种东西
关于Discuz在反向代理后用户IP的获取
原本是Discuz的一个安全处理,这时候却给我带来了点麻烦。
CG最近想给实验室弄个BBS,于是默认选了Discuz,主机原来是Windows的,装了Apache + MySQL + PHP,安装Discuz的时候还很正常,装完之后CG说上不去了。我打开页面,反应了半天还是没出来,于是打算在虚拟机里面装一个Ubuntu,然后在Ubuntu下跑Discuz。
装虚拟机神马的就不再说了,装完之后,突然想到一个问题,虚拟机的IP不能分到一个公网IP,只能是虚拟网卡的内部IP,这就意味着只有服务器能访问虚拟机。我知道Nginx是有反向代理的,然后上网一搜,发现Apache也可以实现反向代理,Apache还确实很强大啊。于是马上修改httpd.conf
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyPreserveHost On ProxyPass /bbs/ http://192.168.77.80/bbs/ ProxyPassReverse /bbs/ http://192.168.77.80/bbs/ ProxyPass /bbs http://192.168.77.80/bbs
检查语法没错,重启Apache服务打开网址一看,OK。装上一个Discuz测试一下,一切正常。然后看到IP我就纠结了,我在论坛上显示的IP都是192.168.77.1,即服务器的IP,怎么会这样子。这个万一要封IP,岂不是都不能上了。于是开始郁闷了,在服务器上抓一下包,发现服务器的Apache反向代理是会转发连接用户的真实IP的,为什么在Discuz中不显示呢?开始我还以为是Discuz设计的问题,没有怎么仔细去查这个问题。突然,今天同学在实验室上网的时候,显示的登录IP是实验室的IP,我就纳闷了,貌似寝室的IP地址Discuz不认啊。于是搜一下源代码,发现在sourceclassdiscuzdiscuz_application.php有如下片段
private function _get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) { foreach ($matches[0] AS $xip) { if (!preg_match('#^(10|172.16|192.168).#', $xip)) { $ip = $xip; break; } } } return $ip; }
原来是Discuz认为寝室的IP段(10.xxx.xxx.xxx)算是伪造的IP,好吧。把寝室的IP段限制删了,马上就正常了。
Ubuntu上搭建PPTPD的VPN
安装pptpd
apt-get install pptpd
vi /etc/pptpd.conf #去掉 localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245 前面的#
vi /etc/ppp/options ms-dns 8.8.8.8 vi /etc/ppp/chap-secrets #依次添加 用户名、服务器、密码、IP
一些常用到的Bash小语句
以后的工作将会与Linux打交道了,所以脚本必须得会用,这篇文章记录一下常用的一些Bash语句,以方便自己查阅。
1.检测当前脚本运行用户是否具有root权限
#!/bin/bash if [ $(id -u) != "0" ]; then echo "Sorry, you must run this as root. You can cry sudo " $0 exit 1 else echo "You are root" fi
2.按照当前日期组织文件名
$(date +%Y%m%d).log #Tips:在用于crontab的计划任务时,由于%在crontab里面有其他的意义,所以必须转义 $(date +%Y%m%d).log