华为云 CentOS6.5默认安装了 apache,可通过命令httpd -v
查看:
Server version: Apache/2.2.15 (Unix)
Server built: Oct 19 2017 16:43:38
顺便一提,系统还自带了python2.6:/usr/lib/python2.6/
1、查看和控制 httpd 服务
1. 到 /etc/rc.d/init.d/ 目录 `cd /etc/rc.d/init.d/`
2. ls 列出所有文件,看看是否有 httpd
3. 使用 httpd -v 查看已经安装的httpd的版本
4. 使用 rpm -qa | grep httpd 查看是否已经安装了 httpd
5. 使用 ps -ef | grep httpd 查看 httpd 的进程
6. 使用 service httpd status 查看 httpd 的运行状态
7. 使用 service httpd stop 可以停止 httpd
8. 使用 service httpd start 可以启动 httpd
- httpd服务启动后,可以在浏览器中输入 http://localhost 浏览测试,如果能看到 apachectl 的测试页面,说明 apachectl 能正常工作。外部服务器输入 http://192.168.28.10(主机IP)
- 也可以使用 apachectl 脚本命令控制 httpd 服务:
1. 启动服务 /usr/sbin/apachectl start
2. 停止服务 /usr/sbin/apachectl stop
3. 重启服务 /usr/sbin/apachectl restart
4. 在可以使用 systemctl 的系统(如CentOS7.0)上可以使用如下命令:
systemctl start httpd
systemctl stop httpd
systemctl restart httpd
``
- apachectl脚本可以作为SysV初始化脚本,接受简单的一个单词的参数,如:
start
,restart
,stop
,并把他们翻译为适当的信号发送给[httpd](http://writeblog.csdn.net/programs/httpd.html)
。 - apachectl脚本如果执行成功,则返回0 ;如果出错,则其返回值>0 。
- 如果你启动的是 /usr/local/apache2/bin/apachectl,
会启动 HTTPD='/usr/local/apache2/bin/httpd' 这个 httpd。
2、Apache文件系统
-
apachectl 控制命令路径
/usr/sbin/apachectl
- 自己安装的 Apache 路径是:/usr/local/apache2/bin/apachectl
-
apachectl 配置文件路径
/etc/httpd/conf/httpd.conf
- Apache服务器的配置信息全部存储在这个主配置文件 httpd.conf 中,文件中的内容非常多,用wc命令统计
wc -l /etc/httpd/conf/httpd.conf
一共有1009行,其中大部分是以#开头的注释行。
-
apachectl 网络文件路径
/var/www/html/
3、配置文件简介
grep '\<Section\>' /etc/httpd/conf/httpd.conf -n
使用这条命令可以搜索到3个 Section 分段,配置文件也就是通过这个 '<Section>' 结构分为3各部分。
- Section 1: Global Environment ---全局环境配置,决定Apache服务器的全局参数
- Section 2: 'Main' server configuration ---主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。
- Section 3: Virtual Hosts---虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了
4、实际使用遇到问题
service httpd start 出现错误:
httpd: Could not reliably determine the server's fully qualified domain name
。
解决办法:到配置文件 /etc/httpd/conf/httpd.conf 中修改一条配置:#ServerName
#ServerName www.example.com:80
=>ServerName localhost:80
解决问题一后重新执行 start 命令又出现了
address already in use:make_sock:could not bind to address [::]:80
,使用 netstat -lnp | grep 80 查看端口使用情况,发现并未被占用。
我这里出现这个问题的原因是我使用的是非 root 用户,su 到 root 后这个报错就消失了。切换到 root 后没有了问题二中的错误了,但是执行 start 命令又出现了一个新的报错:
Starting httpd: (2)No such file or directory: httpd: could not open error log file /etc/httpd/logs/error_log
解决办法:到目录 /etc/httpd/logs/ 查看,发现 logs 名称的文件夹是存在的,但是显示是红色(明显是某种错误提醒),于是我使用 ls -l 查看下文件的具体信息:
drwxr-xr-x. 2 root root 4096 12月 15 20:45 conf
drwxr-xr-x. 2 root root 4096 12月 28 2017 conf.d
lrwxrwxrwx 1 root root 19 12月 28 2017 logs -> ../../var/log/httpd
观察发现这是个 l
类型,这是链接的意思,指向的是 /var/log/httpd ,于是我们到这个目录下去看看,cd /var/log/
然后ls
,并未发现 httpd 文件夹,于是 touch httpd 建了这个文件夹,再次 service httpd start,终于出现:
Starting httpd: [ OK ]
#表示 httpd 服务开启成功了😁😁。
执行 curl http://127.0.0.1
,正常输出 Apache 服务测试的 html 页面。
- 到这里以为已经大功告成了。。。,又出现了一个惊喜,httpd 正常开启中,本地可以访问,但是外部主机访问超时。又开始了查找原因,排除了防火墙没开端口、排除了 IP 白名单和黑名单的影响。最后没办法了,只有打电话问华为云客服400-095-5988-1-2,被告知需要在【控制台->弹性云服务器->对应的服务器的名称->安全组->入规则】 里添加端口号。添加端口后果然立马就可以外网访问了😂,不知道该哭还是笑。。。