- 论坛徽章:
- 0
|
回复 1# kernel359
这个问题最后得到了解决,下面是我的总结:
环境:操作系统为centos6.3,64位的一台PC
数据库(mysql)、dns服务器(bind9)、webservice(axis2)和网站(php)在同一台机器上,dns用53端口,webservice用8080口,webserver(网站)用80口。
1、因为要用到这端口,所以要么关闭防火墙sudo service iptables stop,要么在/etc/sysconfig/iptables进行配置,然后重启sudo service iptables restart
sudo vim /etc/sysconfig/iptables
==============================
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT //开80口,此处80可改为其它端口号,且tcp也可改为udp
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j DROP //关80口
==============================
sudo service iptables restart
2、因为dns服务器,要访问数据库,所以必须在dns服务器的/etc/hosts最后一行加上,加上数据库的域名解析
sudo vim /etc/hosts
===================
111.111.111.111 database-ip
===================
3、当检查webservice是否正常工作时,有两种办法
(1)dig @webserviceIP xxxx //@必不可少,xxxx为要查的数据,在数据库中,同时还可以加 -t naptr参数,可以查naptr类型的数据,当返回的answer为实际记录的个数时,说明正确
(2)在浏览器中,http://webserviceip:8080/xxxxx/xxxx这样也可以。因我所有的在同一台pc上,所以必须加上8080,要不然浏览器会访问80口,导致出现的一直是网站主页
4、用上述方法检查webservice能正常工作,但从网站却不能查询到数据
我最开始是怀疑网站与webservice之间的问题,因为在网站代码中,传给php代码的url,如http://webserviceIP:8080/xxxx,这样查询不到结果,可把同样的url放到浏览器中(也就是直接用webservice查),能返回正确结果,正因为这样,一直没找到原因
最后发现是mysql的授权问题,如果把传给php代码中url改为http://localhost:8080/xxxx,这样就能得到正确结果了,因在mysql中相应localhost授权了,而IP没有
//注:mysql授权不光指用户名,还包括访问时的ip,比如有一台PC,ip为111.111.111.111,则111.111.111.111、127.0.0.1、localhost这三者是不一样的,除非你给他们的授权一样
除了上述外,还有几点注意的:
1、关闭selinux
sudo vim /etc/selinux/config
======================
SELINUX=disabled
======================
2、配置/etc/php.ini
sudo vim /etc/php.ini
==================
allow_url_fopen = On //这样才能正确解析php代码中的url,并得到结果
……
allow_url_include = On //这个我也开了,具体用处不知道
==================
3、因为webserver用的是apache,所以html文件夹(所有网站代码)放在/var/www/下
在/var/www/html中,会有一个.htaccess文件,具体怎么写,以及怎么用,不清楚
以上的是我的个人总结,还有一些不太明白或者可能错误的地方,如果有哪位能批评指正将非常感谢,在此先行谢过!
希望大家互相交流学习,共同进步!
|
|