Ubuntu 16.04服务器配置疑问:子域名指向主域名及site1.conf配置缺失
Ubuntu 16.04 Nginx配置问题解决方案
我来帮你搞定这两个Ubuntu 16.04上的Nginx配置问题,都是日常运维里常碰到的场景,一步步来:
1. 将所有子域名指向主域名(301永久重定向)
要让所有子域名(比如blog.yourdomain.com、test.yourdomain.com这类)自动跳转到主域名,用Nginx的正则匹配server块就能轻松实现:
先打开Nginx的配置目录,创建一个专门的重定向配置文件:
sudo nano /etc/nginx/sites-available/subdomain-redirect.conf写入以下配置,记得把
yourdomain.com替换成你的实际主域名:server { listen 80; # 正则匹配所有以.yourdomain.com结尾的子域名 server_name ~^(?<subdomain>.+)\.yourdomain\.com$; # 301永久重定向到主域名,保留原请求路径 return 301 $scheme://yourdomain.com$request_uri; }启用这个配置,创建软链接到
sites-enabled目录:sudo ln -s /etc/nginx/sites-available/subdomain-redirect.conf /etc/nginx/sites-enabled/检查配置语法是否正确,避免写错导致Nginx启动失败:
sudo nginx -t最后重启Nginx生效:
sudo systemctl restart nginx
如果你的站点启用了HTTPS,记得还要给443端口加同样逻辑的server块,把重定向目标改成https://yourdomain.com$request_uri,同时加上SSL证书相关配置。
2. 修复site1.conf使所有域名指向单个站点的缺失问题
很多时候配置不生效都是因为几个容易忽略的点,先给你一个正确的配置示例,再帮你排查常见问题:
正确的site1.conf配置模板
server { listen 80 default_server; listen [::]:80 default_server; # 匹配所有可能的域名:主域名、www子域、所有子域、以及未定义的任意域名 server_name yourdomain.com www.yourdomain.com *.yourdomain.com _; # 替换成你的站点实际根目录 root /var/www/your-site-folder; # 根据站点类型调整(比如PHP站点要加上index.php) index index.html index.htm index.php; # 静态站点的默认请求处理 location / { try_files $uri $uri/ =404; # 如果是PHP站点(比如WordPress),改成下面这行: # try_files $uri $uri/ /index.php?$args; } # 如果是PHP站点,必须加上这个块处理PHP文件 location ~ \.php$ { include snippets/fastcgi-php.conf; # Ubuntu 16.04默认PHP版本是7.0,根据实际情况调整 fastcgi_pass unix:/run/php/php7.0-fpm.sock; } }
常见缺失问题排查
- 忘记设置
default_server:如果你的listen指令后面没加default_server,Nginx可能会沿用系统默认的default server配置,导致你的site1.conf不生效,这是最常见的坑! server_name覆盖不全:只写主域名的话,www子域或其他域名不会匹配,一定要加上www.yourdomain.com *.yourdomain.com,最后加_可以匹配所有未明确定义的域名。- 站点目录权限错误:确保你的站点根目录
/var/www/your-site-folder的所有者是www-data(Nginx运行用户),否则会出现403错误:sudo chown -R www-data:www-data /var/www/your-site-folder sudo chmod -R 755 /var/www/your-site-folder - 没检查配置语法:每次修改完配置都要跑
sudo nginx -t,如果报错,先修正语法错误再重启。 - 没重载/重启Nginx:修改配置后必须执行
sudo systemctl reload nginx(重载不中断服务)或者sudo systemctl restart nginx,新配置才会生效。
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

