Nginx绑定域名配置

Nginx绑定域名配置

引言

一台服务器跑多个站点,靠server_name区分访问哪个域名,配合DNS解析和站点根目录,Nginx按Host头把请求路由到对应虚拟主机。配置顺序写错或server_name不匹配,会落到默认站点。

基础域名站点

server {
    listen 80;
    server_name www.example.com example.com;
    root /var/www/example;
    index index.html index.php;
}

server_name可并列写主域名和裸域名,root指向站点目录。

裸域名跳转到www

server {
    listen 80;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

避免两个域名都解析内容造成重复收录,统一到一个规范域名。

多个域名并列

server_name api.example.com admin.example.com;

同一套站点对应多个子域名时直接空格分隔。

反向代理绑定域名

server {
    listen 80;
    server_name app.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
    }
}

域名指向后端服务,记得把Host头透传给上游。

配置后检查重载

nginx -t
nginx -s reload

先测语法再平滑重载,reload不断连接。

匹配规则

  • 精确域名优先,然后通配符,最后默认站点;
  • 没匹配上server_name的请求落到default_server;
  • 通配符*.example.com不能匹配example.com裸域;
  • 多站点注意别让无关域名被默认站点接住。

注意事项

  • DNS要先把A记录解析到服务器IP,否则域名打不开;
  • server_name区分大小写但通常小写;
  • 80改443需另配SSL证书块;
  • return 301统一域名利于SEO避免重复;
  • 防火墙和安全组放行80、443;
  • 多个server块listen 80,靠server_name分流。

总结

server_name在server块绑定域名,可并列多个,裸域301跳www统一规范,反代时透传Host,改完nginx -t检查再reload。匹配精确优先于通配符,未命中走默认站点,前提是DNS解析到位、端口放行,统一域名有助于SEO避免重复收录。


emer 发布于  2026-10-20 07:18 

Nginx默认站点配置

Nginx默认站点配置

引言

直接用IP或未匹配到server_name的域名访问时,Nginx会落到默认站点。装好Nginx自带的欢迎页就是默认server,安全上建议改掉,避免暴露版本或被扫描利用。

默认站点如何确定

同一端口下,第一个server块、或带default_server标记的就是默认站点:

server {
    listen 80 default_server;
    server_name _;
    root /usr/share/nginx/html;
    index index.html;
}

server_name用_占位,表示匹配任意未命中的主机名。

配置占位拒绝页

对外只暴露正式站点时,默认站点直接返回444或简单403:

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

444是Nginx特有,直接断开连接,不返回内容。

隐藏版本号

http {
    server_tokens off;
}

避免错误页暴露Nginx版本,减少针对性漏洞扫描。

自定义默认首页

server {
    listen 80 default_server;
    server_name _;
    root /var/www/default;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

多端口默认

HTTPS同理,443也要配default_server:

server {
    listen 443 ssl default_server;
    server_name _;
    # 自签或占位证书,否则握手失败
    return 444;
}

注意事项

  • 一台机器同端口只能有一个default_server;
  • 不配默认站,未匹配域名会落到第一个server,可能串站点;
  • 改完nginx -t校验再reload;
  • 云主机IP直扫建议默认站返回444,不暴露首页;
  • 区分default_server和servername ,前者是优先级标记;
  • SSL默认站必须有证书,否则浏览器握手报错。

总结

默认站点由default_server或同端口首个server决定,用server_name _占位。安全做法是把默认站返回444拒绝、server_tokens off隐藏版本,443也要配默认拒绝站,避免IP直扫串到正式站点。改完务必-t校验再reload。


emer 发布于  2026-10-19 07:35 

Nginx配置多站点,一个服务器跑多个网站

前言

买了一台服务器,想跑好几个网站,不用买好几台服务器。Nginx 的虚拟主机(vhost)功能就是干这个的。本文讲一下怎么用 Nginx 配置多站点。

原理

Nginx 通过 server_name 来区分不同的网站。同一个 IP 同一个端口,根据访问的域名不同,返回不同的网站内容。

用户访问 www.aaa.com  →  网站A的目录
用户访问 www.bbb.com  →  网站B的目录

基础配置方法

第一步:准备网站目录

mkdir -p /var/www/aaa
mkdir -p /var/www/bbb

放两个测试首页:

echo "网站A" > /var/www/aaa/index.html
echo "网站B" > /var/www/bbb/index.html

第二步:创建 Nginx 配置

在 /etc/nginx/conf.d/ 目录下,每个网站一个配置文件。

网站A配置:

vi /etc/nginx/conf.d/aaa.conf

内容:

server {
    listen       80;
    server_name  www.aaa.com aaa.com;

    root  /var/www/aaa;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

网站B配置:

vi /etc/nginx/conf.d/bbb.conf

内容:

server {
    listen       80;
    server_name  www.bbb.com bbb.com;

    root  /var/www/bbb;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

第三步:检查配置并重载

nginx -t
nginx -s reload

第四步:解析域名

把 www.aaa.com 和 www.bbb.com 都解析到这台服务器的 IP 上。

这样两个网站就都能访问了。

带 PHP 的多站点

如果每个网站都要跑 PHP,每个站点的配置里加上 PHP 转发:

server {
    listen       80;
    server_name  www.aaa.com;

    root  /var/www/aaa;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

带 HTTPS 的多站点

每个站点单独配证书:

server {
    listen       443 ssl http2;
    server_name  www.aaa.com;

    ssl_certificate      /etc/nginx/ssl/aaa.crt;
    ssl_certificate_key  /etc/nginx/ssl/aaa.key;

    root  /var/www/aaa;
    index index.php index.html;
}

每个网站用自己的证书,互不影响。

目录结构建议

/etc/nginx/
├── nginx.conf
├── conf.d/
│   ├── aaa.conf      # 网站A配置
│   ├── bbb.conf      # 网站B配置
│   └── ccc.conf      # 网站C配置

每个网站一个配置文件,方便管理。

常见坑

坑1:所有网站都显示同一个内容

访问不同域名,显示的都是同一个网站的内容。

原因: Nginx 默认 server 的问题。

解决: 把第一个 server 块设为默认:

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

其他网站用各自的 server_name。

坑2:新加的站点不生效

加了新的配置文件,但网站还是访问不了。

原因1: 配置文件后缀不对。Nginx 默认只加载 .conf 后缀的文件。

原因2: 没重载 Nginx。

解决:

nginx -t
nginx -s reload

坑3:PHP 解析不对

网站A的 PHP 请求跑到网站B去了。

原因: root 路径不对,或者 PHP 配置里的 root 写死了。

解决: 每个站点的 PHP location 里都写清楚自己的 root:

location ~ \.php$ {
    root  /var/www/aaa;
    ...
}

坑4:文件权限不对

网站B的文件 Nginx 读不了。

解决: 确保所有网站文件的属主都是 www:

chown -R www:www /var/www/

总结

步骤 操作
建目录 mkdir /var/www/网站名
写配置 每个网站一个 .conf 文件
server_name 写域名
root 写网站目录
重载 nginx -s reload
解析域名 域名解析到服务器IP

记住: 一个网站一个配置文件,别全写在 nginx.conf 里,不好管理。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:31 
'); })();