最近开始学习Web开发,把遇到的一些问题和解决方法记录在这里,供大家分享,也便于自己查阅。
服务器端已经由OPS基本搭好了LAMP环境,但是从其它机器上访问服务器的http://ip/index.html 和http://domain/index.html返回404错误。
首先想到的是apache没有配置好,于是检察了apache的配置文件,并且重启apache
cd /usr/local/apache2/bin
sudo ./apachestl restart
但是仍然不起作用。又胡乱试了一下
sudo ./apachestl start
提示apache已经运行了。又使用命令
netstat -an | grep 80
查看一下80端口,显示正在监听。
到现在觉得不是apache的问题,又想到是不是防火墙拦截了http请求。于是关掉防火墙
sudo service iptables stop
这次可以访问http://ip/index.html 了,再打开防火墙
sudo service iptables start
又不能访问了,这说明确实是防火墙拦截了http请求。解决方法是在防火墙里面新增一条规则,允许外面访问80端口。
列出iptables的所有规则
sudo iptables -L
如果在参数里加一个-n,就是以IP地址的形式显示源和目的。iptables里面有INPUT,OUTPUT,FORWARD三个规则链,这三个链实际上都指向了RH-Firewall-1-INPUT,根据RH-Firewall-1-INPUT中的规则进行实际的判断。iptables会按照顺序检察这些规则,一旦匹配,就按照规则处理(ACCEPT,REJECT),后面的规则不再起作用。RH-Firewall-1-INPUT的最后一条规则是拒绝所有,因此,新规则必须插入这条规则前面。于是,我插入了一条新规则
sudo iptables -I RH-Firewall-1-INPUT 3 -p tcp --dport 80 -j ACCEPT
其中,-I代表插入,RH-Firewall-1-INPUT 代表规则链,3代表在第3条规则前面插入,-p代表协议,--dport代表目的端口,-j代表动作。类似的,-A代表在最后添加规则(实际是是无效的,因为前面已经REJECT ALL了),-D代表删除规则。具体可以参考http://apps.hi.baidu.com/share/detail/5504681和http://www.phpfans.net/article/htmls/201006/Mjg4NzMx.html
但是,重启iptables
sudo service iptables restart
之后,该规则就消失了,为此,必须保存该规则
sudo service iptables save
这样,重启iptables也没关系了。
添加规则后,果然可以访问http://ip/index.html 。但是仍然不能访问http://domain/index.html,原因是IP地址和域名没有对应起来。于是修改/etc目录下的hosts文件,增加一行
IP地址 域名 别名
保存后,就可以用http://domain/index.html访问了。
最后试了一下mysql,发现root帐户没有密码,于是修改root密码
update mysql.user set password = password('new') where user='root';
这条命令会将mysql.user表中的所有root帐户的密码都设为new。
好了,今天就写这些了。