当前位置: 首页 > article >正文

Ubuntu中 Nginx 虚拟主机设置指南

Ubuntu中 Nginx 虚拟主机设置指南

目录
  1. 简介
  2. 安装 Nginx
  3. 创建虚拟主机
  4. 配置文件结构
  5. 设置访问日志和错误日志
  6. 处理 403 Forbidden 错误
  7. 测试和重启 Nginx
  8. Nginx 目录重要文件和目录
  9. server_name 指令详解
  10. 参考资源

简介

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于托管多个网站或应用。通过配置虚拟主机(Virtual Hosts),可以在同一台服务器上运行多个独立的网站。本文将指导你如何在 Nginx 中设置虚拟主机。


安装 Nginx

确保你的服务器已经安装了 Nginx。如果没有,可以使用以下命令进行安装:

sudo apt update
sudo apt install nginx

安装完成后,可以通过以下命令启动并启用 Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

创建虚拟主机

1. 创建网站目录

为每个虚拟主机创建一个单独的目录来存放网站文件。例如,为 example.com 创建目录:

sudo mkdir -p /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com

2. 创建默认索引文件

在网站目录中创建一个简单的 index.html 文件:

echo "<html><body><h1>Welcome to example.com!</h1></body></html>" | sudo tee /var/www/example.com/html/index.html

3. 配置 Nginx

编辑或创建一个新的虚拟主机配置文件。通常,这些文件位于 /etc/nginx/sites-available/ 目录下。例如,创建 example.com 的配置文件:

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

添加以下内容到配置文件中:

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

    root /var/www/example.com/html;
    index index.html index.htm;

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

    # 可选:启用目录列表
    # location / {
    #     autoindex on;
    #     try_files $uri $uri/ =404;
    # }
}

保存并关闭文件。

4. 启用虚拟主机

创建一个符号链接,将配置文件链接到 /etc/nginx/sites-enabled/ 目录,以启用该虚拟主机:

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

禁用默认的 Nginx 配置(如果不需要):

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

配置文件结构

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf,而虚拟主机的配置文件通常位于 /etc/nginx/sites-available/。你可以通过创建符号链接到 /etc/nginx/sites-enabled/ 来启用这些配置文件。

示例配置文件

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

    root /var/www/example.com/html;
    index index.html index.htm;

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

    # 访问日志和错误日志
    access_log /var/log/nginx/example.com.access.log combined;
    error_log /var/log/nginx/example.com.error.log warn;
}

设置访问日志和错误日志

为了更好地监控和调试,建议为每个虚拟主机设置独立的访问日志和错误日志。你可以在 server 块中添加以下指令:

access_log /var/log/nginx/example.com.access.log combined;
error_log /var/log/nginx/example.com.error.log warn;

这将为 example.com 创建独立的日志文件,分别记录访问请求和错误信息。


处理 403 Forbidden 错误

如果你遇到 403 Forbidden 错误,可能是由于以下原因:

  1. 没有设置 index 文件

    • 确保网站目录中存在一个默认的索引文件(如 index.htmlindex.htm)。
    • server 块中添加 index 指令,指定要使用的索引文件。
  2. 禁用了目录列表

    • 如果你希望用户能够访问目录内容,但不想提供默认的索引文件,可以在 location 块中添加 autoindex on;
  3. 文件和目录权限问题

    • 确保 Nginx 运行的用户(通常是 www-data)有权限读取网站目录及其文件。
    • 使用以下命令设置正确的权限:
      sudo chown -R www-data:www-data /var/www/example.com
      sudo chmod -R 755 /var/www/example.com
      
  4. SELinux 或 AppArmor 设置

    • 如果系统启用了 SELinux 或 AppArmor,这些安全模块可能会限制 Nginx 访问文件。你可以通过以下命令查看状态:
      sudo aa-status
      sudo sestatus
      

测试和重启 Nginx

在对配置文件进行任何更改后,记得测试 Nginx 配置是否正确,并重新加载或重启 Nginx 服务:

sudo nginx -t
sudo systemctl reload nginx
# 或者
sudo service nginx reload

Nginx 目录重要文件和目录

主要目录和文件

  • /etc/nginx/nginx.conf: Nginx 的主配置文件。
  • /etc/nginx/sites-available/: 存放虚拟主机配置文件的目录。
  • /etc/nginx/sites-enabled/: 存放已启用的虚拟主机配置文件的目录。
  • /var/log/nginx/: 存放 Nginx 日志文件的目录。
  • /var/www/: 存放网站文件的目录。

图片中的文件和目录

根据提供的图片,以下是重要的文件和目录:

  • conf.d: 存放额外配置文件的目录。
  • modules-available: 存放可用模块的目录。
  • modules-enabled: 存放已启用模块的目录。
  • sites-available: 存放虚拟主机配置文件的目录。
  • sites-enabled: 存放已启用虚拟主机配置文件的目录。

server_name 指令详解

server_name 指令用于指定 Nginx 应响应哪些域名的请求。它是一个非常重要的指令,特别是在配置虚拟主机时。以下是 server_name 的详细说明和常见用法:

语法

server_name domain.tld [domain2.tld ...];

常见用法

  1. 单个域名
    如果你只有一个域名,可以直接在 server_name 后面写上该域名:

    server {
        listen 80;
        server_name example.com;
    
        # 其他配置...
    }
    
  2. 多个域名
    如果你有多个域名指向同一个网站,可以在 server_name 后面列出所有域名,用空格分隔:

    server {
        listen 80;
        server_name example.com www.example.com;
    
        # 其他配置...
    }
    
  3. 带通配符的域名
    如果你有一组子域名,可以使用通配符来匹配这些子域名。例如,*.example.com 可以匹配所有 example.com 的子域名:

    server {
        listen 80;
        server_name *.example.com;
    
        # 其他配置...
    }
    
  4. IP 地址
    你也可以使用 IP 地址作为 server_name,这在测试环境中特别有用:

    server {
        listen 80;
        server_name 192.168.1.100;
    
        # 其他配置...
    }
    
  5. 默认服务器
    如果你不指定 server_name 或者希望 Nginx 响应所有未匹配到其他 server_name 的请求,可以使用下划线 _ 作为 server_name,或者省略 server_name 并使用 default_server 参数:

    server {
        listen 80 default_server;
        # 或者
        server_name _;
    
        # 其他配置...
    }
    

特殊情况

  • 精确匹配
    你可以使用 = 来进行精确匹配,只有当请求的域名完全匹配时才会生效:

    server {
        listen 80;
        server_name = example.com;
    
        # 其他配置...
    }
    
  • 正则表达式
    你可以使用正则表达式来匹配复杂的域名模式。正则表达式需要以 ~ 开头:

    server {
        listen 80;
        server_name ~^(www\.)?(?<domain>.+)$;
    
        # 其他配置...
    }
    

    在这个例子中,www.example.comexample.com 都会匹配,并且你可以通过 $domain 变量获取去掉 www. 后的域名。

注意事项

  • DNS 解析:确保你的域名已经正确解析到服务器的 IP 地址。你可以通过 pingnslookup 命令检查域名解析是否正确。
  • SSL/TLS 配置:如果你使用 HTTPS,还需要配置 SSL 证书和密钥,并将 listen 指令改为 listen 443 ssl;
  • 防火墙设置:确保服务器的防火墙允许 HTTP (80) 和 HTTPS (443) 端口的流量。

示例:完整的虚拟主机配置

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

    root /var/www/example.com/html;
    index index.html index.htm;

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

    # 访问日志和错误日志
    access_log /var/log/nginx/example.com.access.log combined;
    error_log /var/log/nginx/example.com.error.log warn;
}

参考资源

  • Nginx 官方文档
  • Ubuntu Nginx 官方文档
  • Nginx 虚拟主机配置教程

总结

通过以上步骤,你应该能够在 Nginx 中成功设置虚拟主机。server_name 指令是配置虚拟主机的关键部分,确保你正确设置了域名、通配符或其他匹配规则。如果有任何问题,请检查 Nginx 的错误日志,寻找更多线索。希望这篇笔记能帮助你顺利配置 Nginx 虚拟主机!


http://www.kler.cn/a/453906.html

相关文章:

  • 【Win11】安装 VMware17 和 Ubuntu
  • 连接串口设备后鼠标出现乱跳
  • 交易生态全解析:聚合交易平台 交易策略平台 技术策略提供方 交易机器人平台 资管、支付平台 社交交易社区 跟单平台在饼圈量化的定义和关系是怎样的?
  • Docker 安装mysql ,redis,nacos
  • Linux挂在新硬盘
  • DP动态规划+贪心题目汇总
  • 24 go语言(golang) - gorm框架安装及使用案例详解
  • 什么是ondelete cascade以及使用sqlite演示ondelete cascade使用案例
  • apisix的hmac-auth认证
  • 【每日学点鸿蒙知识】图片控件对齐、上架的应用无法拉起应用详情页、RotateOptions配置、签名配置问题、弹框背景色
  • Leetcode 200 Number of Islands
  • c++最大公约数和最小公倍数的深入剖析
  • Oracle Database 23ai 中的DBMS_HCHECK
  • AWS Certified AI Practitioner 自学考试心得
  • 关于FPGA的IO三引脚形式
  • 【YOLO】(基础篇一)YOLO介绍
  • TiDB 的MPP架构概述
  • Python进阶之opencv图片和视频基本读取关闭
  • Java后端开发 ”Bug“ 分享——订单与优惠卷
  • 离心式压缩机设计的自动化方法