Nginx Essentials:安装和配置疑难解答

这个cheatsheet风格的指南旨在作为使用Nginx的任何人的快速参考。它涵盖了一些基本的服务管理命令,以及诊断和解决一些常见问题的提示。

介绍

Nginx是一个免费的开源Web服务器,用于托管各种规模的网站和应用程序。 该软件以其对内存资源的低影响,高可扩展性以及可提供安全可预测性能的模块化事件驱动架构而闻名。 Nginx不仅仅是一个Web服务器,还可以作为一个负载均衡器,一个HTTP缓存和一个反向代理。

与任何复杂的软件工具一样,要记住用于管理Nginx服务器的特定命令和最佳实践,或解决可能出现的任何问题都是很困难的。 这个cheatsheet风格的指南旨在作为使用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

要了解有关systemdsystemctl命令的更多信息,请查看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的不同值来反映您的特定需求。

为动态处理的网站创建文档根目录

当某些程序(例如PHP-FPM)使用Nginx生成一个动态处理的站点时,您可能需要调整一些文件的权限,以允许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目录到Nginx在启动过程中读取的sites-enabled目录的符号链接来启用一个服务器块的配置文件。

为此,请输入以下命令:

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更改时将看到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配置文件中没有语法错误,你会看到如下的输出:

nginx: 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 sites-available目录中,否则将不会使用这些块。
  • /etc/nginx/sites-enabled/ :存储启用每个站点“服务器块”的目录。 通常,这些是通过链接到sites-available目录中找到的配置文件创建的。

服务器日志

  • /var/log/nginx/access.log :除非Nginx被配置为其他方式,否则对您的Web服务器的每个请求都记录在此日志文件中。
  • /var/log/nginx/error.log :任何Nginx错误都会记录在这个日志里。
  • 要访问Nginx进程的systemd日志,运行以下命令:
sudo journalctl -u nginx

结论

本指南涵盖了管理Nginx服务器的基本命令和实践,包括如何启动,停止和检查Nginx的状态,如何查找网站的文档根,以及如何检查Nginx配置文件的语法。 要详细了解如何使用Nginx,我们推荐阅读以下教程。