linux网络实战二www服务器搭建
Apache装完那一刻,络实其实你只是服务把一把枪上了膛,子弹还没塞进去。器搭HTTPD服务跑起来,络实监听80端口,服务但浏览器敲IP进去看到的器搭要么是默认测试页,要么是络实403。真正让www服务器干活,服务得把配置文件、器搭目录权限、络实防火墙三件事同时捋顺。服务少一个,器搭页面就是络实出不来。 我习惯先确认服务状态。服务`systemctl status httpd` 或者 `systemctl status apache2`,器搭取决于你用的发行版。CentOS系叫httpd,Debian/Ubuntu系叫apache2。名字不同,配置文件路径也不一样:前者在`/etc/httpd/conf/httpd.conf`,后者在`/etc/apache2/apache2.conf`。别搞混了,网上教程一大半坑就坑在这儿。 主配置文件里,`DocumentRoot`指向网站根目录。默认通常是`/var/www/html`。你可以改成`/data/www`之类,但改完必须同步处理`<Directory>`段里的权限声明。举个例子: Apache 2.4之后,`Order allow,deny`那套旧写法已经废弃,用`Require all granted`才生效。很多人从老教程抄过来,结果403,排查半天,其实就是语法版本对不上。 目录权限是另一个高频翻车点。Linux下Apache进程通常以`apache`或`www-data`用户运行。你的网站目录如果属主是root,权限是750,那Apache读不到文件,照样403。我一般直接给目录755,文件644,属主设成Apache运行用户。粗暴但管用。生产环境可以更细,但实验阶段没必要给自己添堵。 防火墙这块,firewalld和ufw各管各的。CentOS 7以上默认firewalld,放行80端口: Ubuntu用ufw的话就是`ufw allow 80/tcp`。别忘了SELinux。CentOS上它默认 enforcing,哪怕权限和防火墙都对,SELinux照样拦你。临时关掉`setenforce 0`能验证问题,但别长期关。正确做法是给目录打上`httpd_sys_content_t`标签: 虚拟主机才是www服务器的实战核心。一台机器跑多个站点,靠的就是VirtualHost。基于域名的配置最常用,在`/etc/httpd/conf.d/`下新建`site1.conf`: Debian系则在`/etc/apache2/sites-available/`下建文件,然后用`a2ensite`启用。每个站点独立日志,出问题好排查。我见过有人所有站点共用一个日志,结果某个站被扫描器狂刷,日志爆到几个G,磁盘满了整台机器挂掉。 测试阶段,本地hosts文件加一行`127.0.0.1 www.site1.com`就能验证。别急着改DNS,先确认Apache配置本身没问题。`apachectl configtest`或者`apache2ctl configtest`跑一下,语法错误会直接报行号。 最后说个细节:默认首页优先级。`DirectoryIndex`指令决定Apache先找哪个文件。常见配置是`index.html index.php`。如果你放了`index.php`但没装PHP模块,Apache不会报错,它会继续找下一个,找不到就列目录或者403。所以页面空白时,先确认文件确实存在于DocumentRoot下,再确认模块加载了。`httpd -M | grep php`一看便知。 搭www服务器不难,难的是每个环节都踩对。配置、权限、防火墙、SELinux、虚拟主机,五样全绿,浏览器才能吐出你想要的页面。少一样,就是403、404或者连接超时三选一。<Directory /data/www> Require all granted </Directory>firewall-cmd --permanent --add-service=http firewall-cmd --reloadsemanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?" restorecon -Rv /data/www<VirtualHost *:80> ServerName www.site1.com DocumentRoot /data/www/site1 ErrorLog /var/log/httpd/site1_error.log CustomLog /var/log/httpd/site1_access.log combined </VirtualHost>