当前位置: 代码网 > it编程>数据库>Mysql > Ubuntu中Nginx虚拟主机设置的项目实践

Ubuntu中Nginx虚拟主机设置的项目实践

2025年03月16日 Mysql 我要评论
简介nginx 是一个高性能的 http 和反向代理服务器,广泛用于托管多个网站或应用。通过配置虚拟主机(virtual hosts),可以在同一台服务器上运行多个独立的网站。本文将指导你如何在 ng

简介

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 错误,可能是由于以下原因:

没有设置 index 文件

确保网站目录中存在一个默认的索引文件(如 index.html 或 index.htm)。

在 server 块中添加 index 指令,指定要使用的索引文件。

禁用了目录列表

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

文件和目录权限问题

确保 nginx 运行的用户(通常是 www-data)有权限读取网站目录及其文件。

使用以下命令设置正确的权限:

sudo chown -r www-data:www-data /var/www/example.com
sudo chmod -r 755 /var/www/example.com

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 ...];

常见用法

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

server {
    listen 80;
    server_name example.com;

    # 其他配置...
}

多个域名
如果你有多个域名指向同一个网站,可以在 server_name 后面列出所有域名,用空格分隔:

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

    # 其他配置...
}

带通配符的域名
如果你有一组子域名,可以使用通配符来匹配这些子域名。例如,*.example.com 可以匹配所有 example.com 的子域名:

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

    # 其他配置...
}

ip 地址
你也可以使用 ip 地址作为 server_name,这在测试环境中特别有用:

server {
    listen 80;
    server_name 192.168.1.100;

    # 其他配置...
}

默认服务器
如果你不指定 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.com 和 example.com 都会匹配,并且你可以通过 $domain 变量获取去掉 www. 后的域名。

注意事项

  • dns 解析:确保你的域名已经正确解析到服务器的 ip 地址。你可以通过 ping 或 nslookup 命令检查域名解析是否正确。
  • 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 中成功设置虚拟主机。server_name 指令是配置虚拟主机的关键部分,确保你正确设置了域名、通配符或其他匹配规则。如果有任何问题,请检查 nginx 的错误日志,寻找更多线索。希望这篇笔记能帮助你顺利配置 nginx 虚拟主机!

到此这篇关于ubuntu中nginx虚拟主机设置的项目实践的文章就介绍到这了,更多相关nginx虚拟主机设置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com