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

2025-03-16 13:50

本文主要是介绍Ubuntu中Nginx虚拟主机设置的项目实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可...

简介

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

编辑或创建一个新的虚拟主机配置文python件。通常,这些文件位于 /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,而虚拟主js机的配置文件通常位于 /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 可以匹配www.chinasem.cn所有 example.com 的子域名:

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

    # 其他配置...
}

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

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) 端口的流量。

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

javascript
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 虚拟主机!

到此这篇关于Ubuntu中Nginx虚拟主机设置的项目实践的文章就介绍到这了,更多相关Nginx虚拟主机设置内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Ubuntu中Nginx虚拟主机设置的项目实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153778

相关文章

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图