Nginx入门:如何配置Server Blocks (虚拟主机)托管你的第一个网站

Nginx入门:如何配置Server Blocks (虚拟主机)托管你的第一个网站

装好了Nginx,访问服务器IP看到了那个经典的 “Welcome to nginx!” 页面,是不是感觉离成功近了一步,但又有点意犹未尽?没错,那个只是Nginx的默认“招呼页”,它证明Nginx在工作,但离展示你自己的网站还有关键一步。

想让Nginx真正为你的域名(比如 yourdomain.com)服务,或者更酷一点,在同一台服务器上运行好几个不同的网站(比如 site1.com, site2.org),你就需要掌握Nginx的“地盘划分”秘籍——Server Blocks

这个概念在Apache里叫虚拟主机(Virtual Hosts),在Nginx里叫Server Blocks。简单理解,它就是一套配置指令,告诉Nginx:“当收到访问 yourdomain.com 的请求时,你应该去 /var/www/yourdomain.com/html 目录找网站文件来响应。” 每个Server Block可以对应一个或多个域名,管理自己独立的网站根目录和相关配置。

听起来有点复杂?别怕,跟着下面的步骤走,配置你的第一个Server Block托管网站,其实很简单!

前提条件:

  • 你已经按照之前的指南在你的Linux服务器(Ubuntu/CentOS等)上成功安装并运行了Nginx
  • 你拥有一个域名(或者暂时用一个假域名如 yourdomain.com 配合本地hosts文件测试)。
  • 你知道你的服务器公网IP地址。
  • 你能通过SSH连接到服务器,并拥有sudo权限。

推荐的目录结构(约定俗成)

为了方便管理,我们通常这样做:

  • 网站文件存放:/var/www/ 目录下,为每个网站创建一个单独的目录,里面再创建一个 html (或 public_html) 子目录存放网页文件。例如:/var/www/yourdomain.com/html
  • Nginx配置存放: Nginx的主配置文件通常是 /etc/nginx/nginx.conf。而每个网站(Server Block)的独立配置文件,我们放在 /etc/nginx/sites-available/ 目录下,文件名通常用域名命名(如 yourdomain.com)。然后,通过创建一个符号链接 (symlink) 到 /etc/nginx/sites-enabled/ 目录来“启用”这个网站配置。

Step 1: 创建网站根目录和示例页面

假设你的域名是 yourdomain.com (请替换成你自己的真实域名或测试域名)。

1.创建目录: -p 参数能确保父目录不存在时也会被创建。

Bash

sudo mkdir -p /var/www/yourdomain.com/html

2.设置权限: 为了让Nginx有权限读取网站文件,通常将目录所有者设置为Nginx运行的用户(在Ubuntu/Debian上通常是 www-data,在CentOS/RHEL上可能是 nginx)。

Bash

# 适用于 Ubuntu/Debian
sudo chown -R www-data:www-data /var/www/yourdomain.com/html
# 适用于 CentOS/RHEL
# sudo chown -R nginx:nginx /var/www/yourdomain.com/html

# 设置合适的目录权限 (通常755即可)
sudo chmod -R 755 /var/www/yourdomain.com

3.创建首页文件: 创建一个简单的 index.html 文件作为网站首页。

Bash

sudo nano /var/www/yourdomain.com/html/index.html

在编辑器里输入以下内容:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Welcome to yourdomain.com!</title>
</head>
<body>
    <h1>Success! Your Nginx server block is working!</h1>
    <p>This site for yourdomain.com is up and running.</p>
</body>
</html>

保存并关闭文件 (nano中是 Ctrl+X, 然后按 Y, 再按 Enter)。

Step 2: 创建 Server Block 配置文件

现在,为你的网站创建一个Nginx配置文件。

Bash

sudo nano /etc/nginx/sites-available/yourdomain.com

将以下配置模板粘贴进去,并务必修改其中的占位符:

Nginx

server {
    # 监听IPv4和IPv6的80端口 (HTTP)
    listen 80;
    listen [::]:80;

    # 你的网站文件存放根目录
    root /var/www/yourdomain.com/html;

    # 默认首页文件名
    index index.html index.htm;

    # 你的域名,可以写多个,用空格隔开
    # www.yourdomain.com 是为了用户输入带www也能访问
    server_name yourdomain.com www.yourdomain.com; # <-- 把这里替换成你的域名!

    # 处理请求的基本规则
    location / {
        # 尝试直接提供文件,如果找不到就尝试作为目录访问,再找不到就返回404
        try_files $uri $uri/ =404;
    }

    # (可选) 为这个站点单独配置访问和错误日志
    # access_log /var/log/nginx/yourdomain.com.access.log;
    # error_log /var/log/nginx/yourdomain.com.error.log;
}

解释一下关键几行:

  • listen 80;: 让Nginx监听标准的HTTP端口80。
  • root ...;: 指定这个网站的文件应该从哪个目录读取。
  • index ...;: 如果用户只访问域名(没指定文件名),Nginx会依次尝试找这些文件作为首页。
  • server_name ...;: **极其重要!**这里列出所有访问这个网站应该匹配的域名。Nginx通过这个来区分应该用哪个server块来处理请求。
  • location / { ... }: 定义了如何处理对网站根目录(/)及所有子路径的请求。try_files 是处理请求的标准方式,确保能正确访问文件和目录下的index文件。

修改完 server_name 和确认 root 路径无误后,保存并关闭文件。

Step 3: 启用这个 Server Block

创建了配置文件还不行,得让Nginx“知道”并使用它。我们通过创建符号链接到 sites-enabled 目录来实现:

Bash

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

重要一步:处理默认配置冲突

Nginx安装后通常带有一个默认的配置文件(在sites-enabled里的default文件),它会处理所有未被其他server_name匹配的请求。为了让你刚才配置的域名能优先被匹配,建议移除或修改这个默认配置

Bash

sudo rm /etc/nginx/sites-enabled/default

(注意:如果你还有其他配置依赖于这个默认文件,请不要删除,而是编辑它,确保它的 listen 80 指令后面加上 default_server,并且 server_name 不要与你的域名冲突,或者干脆注释掉整个server块)。 对于新手托管第一个网站,删除通常是让新配置生效最直接的方法。

Step 4: 测试配置并让Nginx重新加载

在应用任何更改之前,务必先检查Nginx配置文件语法是否正确

Bash

sudo nginx -t

如果看到类似下面的输出,说明语法没问题:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果提示有错误,它会指出错误发生在哪个文件的哪一行,你需要回去编辑文件修正错误,然后再次测试,直到成功为止。

测试成功后,平滑地重新加载Nginx配置(无需中断服务):

Bash

sudo systemctl reload nginx

Step 5: (可选) 配置DNS或本地Hosts文件

要让浏览器能通过域名访问你的网站,需要进行域名解析设置:

  • 如果你用的是真实域名: 去你的域名注册商或DNS服务商那里,添加一条A记录,将你的域名(yourdomain.comwww.yourdomain.com)指向你服务器的公网IP地址。注意DNS记录生效可能需要几分钟到几小时不等(DNS传播时间)。
  • 如果你只是本地测试或DNS还没生效: 你可以修改你自己的电脑上的 hosts 文件,强制将域名解析到你的服务器IP。
    • Linux/macOS: 编辑 /etc/hosts 文件 (sudo nano /etc/hosts)
    • Windows: 以管理员身份编辑 C:\Windows\System32\drivers\etc\hosts 文件
    • 在文件末尾添加一行: <你的服务器公网IP地址> yourdomain.com www.yourdomain.com

保存文件。这样你的电脑访问这个域名时就会直接去找你的服务器了。测试完毕后记得删除或注释掉这一行,以免影响正常访问。

Step 6: 见证成果!浏览器访问

打开你的Web浏览器,输入你的域名 http://yourdomain.com (或者你在 server_name 里配置的其他域名)。

如果一切顺利,你应该能看到你之前创建的 index.html 页面的内容,显示 “Success! Your Nginx server block is working!”,而不是 Nginx 的默认欢迎页了!

如果没成功?

  • 清除浏览器缓存再试试。
  • 确认DNS解析是否已生效(使用 ping yourdomain.comnslookup yourdomain.com 命令检查解析到的IP是否正确)。
  • 再次检查Nginx配置文件 (/etc/nginx/sites-available/yourdomain.com) 的 server_nameroot 路径是否写对。
  • 确认 sites-enabled 目录下的符号链接是否正确创建,并且没有冲突的 default 配置(如果你选择删除了它)。
  • 查看Nginx错误日志 (/var/log/nginx/error.log 或你为站点指定的错误日志) 看有没有线索。

恭喜!你已经成功配置了Nginx的第一个Server Block,让它为你指定的域名提供服务了。这是掌握Nginx配置非常关键的一步。熟悉了这个流程,以后在同一台服务器上添加第二个、第三个网站也就是依样画葫芦的事情了。

实操指南知识库

SSH连接不上?'Connection Refused' 或 'Timeout' 常见原因与排查方法

2025-4-11 10:54:55

知识库

告别小白:20个必须掌握的Linux服务器常用命令(文件/进程/网络操作)

2025-4-11 12:28:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧