NginxEssentials:安装和配置故障排除
###介绍
Nginx 是一个免费的开源网络服务器,用于托管各种规模的网站和应用程序。 该软件以其对内存资源的低影响、高可扩展性以及可提供安全、可预测性能的模块化、事件驱动架构而闻名。 Nginx 不仅仅是一个 Web 服务器,它还可以用作负载均衡器、HTTP 缓存和反向代理。
与任何复杂的软件工具一样,很难记住用于管理 Nginx 服务器或对可能出现的任何问题进行故障排除的特定命令和最佳实践。 这个备忘单风格的指南旨在为使用 Nginx 的任何人提供快速参考。 它将涵盖一些基本的服务管理命令,以及诊断和解决一些常见问题的技巧。
如何使用本指南:
- 每个部分都可以独立于其他部分使用,因此请随意跳到与您的需求相关的部分。
- 本指南每个部分中的命令都是独立的,您应该将示例命令中的红色值替换为您自己的值。
- 如果相关,本指南中的部分包含指向其他资源的链接,您可以查阅这些资源以获取更多信息。
- 本指南假定您正在使用从基于 Debian 的发行版的默认存储库安装的 Nginx 版本。 请注意,本指南中描述的某些约定在其他发行版或其他来源的 Nginx 版本中不存在。
- 安装Nginx
使用 sudo apt-get
,更新你的包索引,然后安装服务:
sudo apt-get update sudo apt-get install nginx
有关安装和设置过程的更多详细信息,请按照我们关于 如何在 Ubuntu 16.04 上安装 Nginx 的教程进行操作。
- 检查Nginx的状态
您可以通过在命令提示符中输入以下内容来检查 Nginx 是否在您的计算机上运行:
sudo systemctl status nginx
- 启用Nginx
默认情况下,Nginx 配置为在服务器启动时自动启动。 如果需要,您可以通过键入以下内容来禁用此行为:
sudo systemctl disable nginx
要重新启用服务以在引导时启动,请键入:
sudo systemctl enable nginx
- 停止、启动和重新加载 Nginx
停止你已经运行的 Nginx 服务器:
sudo systemctl stop nginx
服务器停止后,您可以通过键入以下内容再次启动它:
sudo systemctl start nginx
要停止然后重新启动 Nginx,请键入:
sudo systemctl restart nginx
您还可以在不中断连接的情况下重新加载 Nginx:
sudo systemctl reload nginx
要了解有关 systemd
和 systemctl
命令的更多信息,请查看此 systemd Essentials 简介 。
- 为静态站点创建文档根目录
使用 Nginx Web 服务器时,服务器块(类似于 Apache 中的虚拟主机)用于在单个服务器上托管多个域。 每个服务器块都有自己的文档根目录,这是 Nginx 在提供域内容之前必须检查的一个特殊目录。
下面块中的命令将创建一个新的文档根目录,将文档根目录的所有权修改为您的非 root 用户,并修改 /var/www/
中每个子目录的权限。
sudo mkdir -p /var/www/example.com/html sudo chown -R $USER:$USER /var/www/example.com/html find /var/www -type d -exec chmod 775 {} \;
在此示例中,我们确保文档根目录具有全局读取和执行权限,但您应该将 775
替换为不同的值以反映您的特定需求。
- 为动态处理的站点创建文档根目录
当将 Nginx 与某些程序(例如 PHP-FPM)一起使用以生成动态处理的站点时,您可能需要调整某些文件的权限以允许 www-data
组访问甚至所有权,特别是如果它需要能够写入目录。
下面块中的命令将创建一个新的文档根目录,将文档根目录的所有权修改为www-data
组,并修改/var/www
内每个子目录的权限。
sudo mkdir -p /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com sudo find /var/www -type d -exec chmod 775 {} \;
要了解有关权限的更多信息,请参阅我们的 Linux 权限简介。 查看我们关于 如何在 Ubuntu 16.04 上设置 Nginx 服务器块(虚拟主机)的教程也可能会有所帮助,该教程提供了创建和更改文档根目录的详细方法。
- 启用配置文件
我们可以通过创建从 sites-available
目录到 sites-enabled
目录的符号链接来启用服务器块的配置文件,Nginx 将在启动期间读取该目录。
为此,请输入以下命令:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
链接文件后,重新加载 Nginx 以反映更改并启用服务器块的配置文件:
sudo systemctl reload nginx
- 解决哈希桶内存问题
Nginx 使用哈希表(组织成“桶”)来快速处理静态数据,如服务器名称或 MIME 类型。 因此,如果您添加了多个服务器名称,则服务器名称哈希存储桶的大小可能不再足够,并且您在进行更改时会看到 server_names_hash_bucket_size
错误。 这可以通过调整 /etc/nginx/nginx.conf
文件中的单个值来解决。
要打开此配置文件,请输入:
sudo nano /etc/nginx/nginx.conf
在文件中,找到 server_names_hash_bucket_size
指令。 删除 #
符号以取消注释该行,并将指令的值增加二的下一次幂:
/etc/nginx/nginx.conf
http { . . . server_names_hash_bucket_size 64; . . . }
这样做会增加 Nginx 的服务器名称哈希表的存储桶大小,并允许服务处理您添加的所有服务器名称。 完成后保存并关闭文件,然后重新启动 Nginx 以反映更改。
- 检查您的配置文件
每当您对 Nginx 配置文件进行更改时,重要的是检查您是否留下了任何语法错误。 这可以通过发出以下命令来完成:
sudo nginx -t
如果您的配置文件中有错误,该命令的输出将告诉您在文件中的确切位置发现错误。 相反,如果您的任何 nginx 配置文件中没有语法错误,您将看到类似于以下的输出:
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
如果未发现错误并且您想立即应用更改,请重新启动服务:
sudo systemctl restart nginx
- 重要的 Nginx 文件和目录
当您花时间使用 Nginx 时,您可能会发现自己经常访问以下文件和目录:
###内容
/var/www/html
:这是提供实际 Web 内容的默认文档根目录的位置。 可以通过更改 Nginx 配置文件来更改文档根目录。
- 服务器配置
/etc/nginx/
:可以找到所有 Nginx 配置文件的默认 Nginx 配置目录。/etc/nginx/nginx.conf
:主要的 Nginx 配置文件。 这可以指导对 Nginx 的配置进行全局更改。/etc/nginx/sites-available/default
:Nginx 的默认服务器块文件。 其他每个站点的服务器块也存储在sites-available
目录中,尽管除非它们链接到sites-enabled
目录中,否则不会使用这些块。/etc/nginx/sites-enabled/
:存储启用的每个站点“服务器块”的目录。 通常,这些是通过链接到sites-available
目录中的配置文件来创建的。
- 服务器日志
/var/log/nginx/access.log
:对您的 Web 服务器的每个请求都记录在此日志文件中,除非 Nginx 配置为不这样做。/var/log/nginx/error.log
:任何 Nginx 错误都将记录在此日志中。- 要访问 Nginx 进程的 systemd 日志,请运行以下命令:
sudo journalctl -u nginx
##结论
本指南涵盖了管理 Nginx 服务器的基本命令和实践,包括如何启动、停止和检查 Nginx 的状态,如何查找网站的文档根目录以及如何检查 Nginx 配置文件的语法。 要了解有关使用 Nginx 的更多信息,我们建议阅读以下教程。