linux配置web服务器
去年帮朋友迁移一个日活两万的服务小型电商站,用的服务就是Linux + Nginx + PHP这套组合。折腾完那晚,服务我盯着终端里刷过的服务日志,突然意识到:配置web服务器这事儿,服务本质上就是服务一场关于“精确”的博弈——每个参数、每个路径、服务每个权限,服务错一个字符,服务整个服务就可能静默崩溃。服务
先装Nginx。服务Ubuntu上敲apt install nginx,服务CentOS则是服务yum install nginx,这没啥好说的服务。但装完别急着高兴,服务默认配置就是个空壳子。你得进/etc/nginx/sites-available/,手动建个文件,比如叫myshop,写进去server块。我习惯把监听端口、域名、根目录先摆出来,像这样:
server { listen 80; server_name shop.example.com; root /var/www/myshop/public; index index.php index.html; } 这里有个坑。很多人忘了root路径要指向项目里真正放入口文件的地方,而不是项目根目录。上次帮人排查,他愣是把Laravel的public目录漏了,结果访问首页全是404。这种错不报错,就是白屏,特别磨人。
配完站点,记得建立软链接到sites-enabled,然后nginx -t测试语法。这个命令是我的救命稻草——每次改完配置,先跑它,能省下半小时的排错时间。测试通过就systemctl reload nginx,让改动生效。别用restart,reload是平滑重载,不会断掉正在处理的请求。
静态文件搞定了,动态请求得交给PHP。装PHP-FPM,版本号要对上,比如PHP 8.2就装php8.2-fpm。然后回到server块里,加一段location规则:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; } 这段代码的意思是把所有.php结尾的请求,扔给FPM进程去处理。注意那个sock路径,不同发行版不一样,得用ls /run/php/确认下实际文件名。我见过有人照抄网上的配置,路径写错,结果PHP文件直接变成下载——浏览器把源码吐出来了,那场面,用户数据全裸奔。
权限这块最容易被忽略,也最容易出大事。Nginx运行用户通常是www-data,你得确保/var/www/myshop目录能被这个用户读取。用chown -R www-data:www-data /var/www/myshop改所有者,但别整个目录都777,那等于把门敞开让黑客进来。我一般只对storage或uploads这类需要写入的目录单独放开写权限,其余保持755。
最后一步,防火墙。很多新手卡在这——配置全对,但外部就是访问不了。Ubuntu的ufw,CentOS的firewalld,都得放行80和443端口。命令很简单:ufw allow 80/tcp,但忘了执行的人一大把。我自己就栽过一回,在阿里云上折腾两小时,最后发现是安全组规则没加。
测试时用curl -I http://localhost看响应头,200就对了。如果返回500,去查/var/log/nginx/error.log,那里面写的比任何文档都实在。真正把服务跑起来后,你会感受到那种“从零到一”的掌控感——浏览器里刷出页面那一刻,之前所有烦躁都值了。














