首页 帮助中心 NGINX配置初学者指南及常见问题解答
NGINX配置初学者指南及常见问题解答
时间 : 2025-04-09 14:37:16 编辑 : 华纳云 阅读量 : 48

  NGINX 的功能是什么?NGINX 是一款开源软件,旨在快速处理大量并发连接。它管理从静态文件传输到繁忙网站的负载均衡等所有事务。许多人将其称为 NGINX Web 服务器,但它也可以用作 NGINX 反向代理,当您需要保护后端服务免受直接公共访问时,此功能非常方便。

  Apache 一直是 Web 托管的传统选择,但它以更注重流程驱动的方式处理请求。这种方式在流量激增时可能会变得负担过重。相比之下,NGINX 采用事件驱动的设计,能够以更少的资源服务更多客户端。这通常可以带来更高的性能和更低的内存占用。

  您会发现它被小型企业、大型品牌以及运营流媒体服务的人士广泛使用。为什么?因为它非常灵活。例如,您可以将 SSL 处理任务交给 NGINX,并将未加密的流量传递到后端服务器。您还可以在后台将传入的请求分发到多个服务器。

  本质上,NGINX 是什么?它是一个能够处理大规模并发、高效提供静态文件并顺利管理复杂工作负载的引擎。

  NGINX 指令

  NGINX 依靠指令来完成其工作。每个指令就像一条指示服务器如何运行的指令。您通常可以在 NGINX 配置文件中找到它们,在/etc/nginx/nginx.conf许多 Linux 发行版中通常位于。具体位置可能因您的发行版(Ubuntu、CentOS、Arch Linux 等)和安装方法而异。指令看起来像directive_name value;并且始终以分号结尾。

  您将在不同的上下文中看到 NGINX 配置指令。有些指令位于主(全局)作用域中,该作用域适用于整个服务器。其他指令则位于http块、server块或location块中。一些 NGINX 全局指令定义用户权限或工作进程,从而为您提供一个大致的框架。以下是一个小示例:

 user nginx;
 worker_processes auto;
 pid /run/nginx.pid;

  这些行阐明了谁在运行 NGINX、应该启动多少个工作进程以及 PID 文件的存储位置。在这些行下方,您通常会看到http { ... }HTTP 相关的设置。

  在 中http,您可以添加用于压缩、缓存或日志记录的指令。然后,您将拥有用于特定于域或特定于路径的指令的服务器和位置块。嵌套很重要。如果您在http块中放置了某些内容,则除非在较低级别被覆盖,否则它将被所有服务器块共享。跟踪此层次结构将有助于您组织文件并减少错误。

  HTTP 块

  在大多数设置中,NGINX HTTP 块存在于主文件nginx.conf或通过语句引入的文件中include。此块决定了在服务器或位置块细化细节之前如何处理 HTTP 流量。

  本节中的典型指令可能会设置默认内容类型、管理连接超时或启用文件压缩。例如:

  http {
      include       mime.types;
      default_type  application/octet-stream;

      sendfile       on;
      keepalive_timeout  65;
  }

  这里,include mime.types;帮助 NGINX 识别文件类型(例如.html和.css)。该sendfile on;指令使用基于操作系统的机制来简化文件传输。如果您想启用 gzip,也需要在此处启用。

  可以将其想象成一个广阔的画布。HTTP 块中定义的任何设置都会全局生效,除非更深层的块或指令覆盖它。

  服务器块

  如果您计划在单个 NGINX 实例上托管多个站点,那么 NGINX 服务器块将是您的好帮手。每个服务器块定义了特定站点或域名的行为方式。简单来说,服务器块可能如下所示:

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

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

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

  在这里,您可以指定端口 ( listen 80;) 和域名。您还可以决定网站文件的存放位置。这通常称为“虚拟托管”。您可以将多个服务器块放在一个文件中,也可以将它们拆分到 NGINX 包含的单独文件中。更改未显示?请参阅常见问题解答以获取提示。

  SSL?没问题。只需listen 443 ssl;在同一个块内使用您的证书和密钥设置即可。您还可以为不同的 URL 设置位置块,让您可以微调网站的结构。例如,您可以将请求转发到 的后端应用程序,同时/api/在 下提供静态文件/。

  服务器块将每个站点整齐地包含在内,从而可以直接在同一个物理或虚拟服务器上管理多个域。

  位置区块

  在服务器块中,NGINX 位置块详细说明了如何处理某些路径或文件模式。您可以使用它们来提供图像、将 PHP 请求转发到 FastCGI 进程,甚至拒绝访问隐藏文件。例如:

  location /images/ {
      alias /var/data/images/;
  }

  location ~ \.php$ {
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
      include fastcgi_params;
  }

  第一个位置将下面的所有内容移交/images/给 目录/var/data/images/。第二个位置使用正则表达式 ( ~ \.php$) 来匹配.php文件并将它们传递给 PHP-FPM 套接字。

  NGINX 对位置块使用优先级系统。精确匹配(例如location = /hello.html)优先于更通用的匹配。如果使用正确的标志指定,基于正则表达式的匹配也可以覆盖。如果您必须调整子路径的行为,嵌套位置可以让您进行更深入的操作。

  NGINX 在匹配位置块时遵循特定的顺序:

  完全匹配 (=):location = /path

  优先前缀匹配(^~):location ^~ /path

  正则表达式匹配(~,~*):location ~ \.php$

  前缀匹配:location /path

  NGINX 首先检查是否存在精确匹配。如果不存在,它会记住最长前缀匹配,然后检查正则表达式匹配。如果正则表达式匹配,NGINX 会使用该位置;否则,它会使用已存储的前缀匹配。了解此优先级系统有助于防止配置中出现意外行为。

  不确定哪个位置块生效了?您可以运行nginx -T,然后扫描您的域名和路径,以检查整体配置。此外,nginx -t在重新加载之前,请考虑使用 来确认语法正确。

  使用位置根和索引

  root有时你会看到带有或 的NGINX location 命令alias。这会告诉 NGINX 在哪里查找实际文件。例如:

  location / {
      root /var/www/mywebsite;
      index index.html index.htm;
  }

  当有人访问您的域名时,NGINX 会查找/var/www/mywebsite或index.html。index.htm如果两者都不存在,您可以设置自定义错误页面或依赖默认的 404.

  alias与 略有不同root。使用 时alias,您指定的路径将替换整个请求路径。使用 时root,NGINX 会将请求 URI 附加到目录路径。如果您仔细规划,这两种方法都可以。只需确保您了解文件的排列方式,以便请求能够正确映射到底层文件系统。

  这种简单的安排可以帮助您避免麻烦。如果您遇到意外的 404 错误,请仔细检查您使用的指令,并确保文件路径与实际情况相符。有关更多信息,请参阅常见问题解答。

  监听端口

  默认情况下,NGINX 监听 HTTP 端口 80 和 HTTPS 端口 443.这由 NGINX listen 指令定义。例如:

  server {
      listen 80;
      server_name mysite.org;
      ...
  }

  您还可以启用多个 NGINX 监听端口:

  listen 80;
  listen 8080;

  如果您有多个网络接口,则可以使用以下命令指定 IP:

 listen 192.168.1.10:80;

  请记住调整防火墙规则,以免阻止这些端口的流量。这样,无论访问者使用哪个端口,他们都可以访问您的内容。

  Server_name 指令

  NGINX 服务器名称指令告诉服务器块应该处理哪些域或子域:

 server_name example.org www.example.org;

  此块将响应任一域的请求。还允许使用通配符:

 server_name *.example.net;

  匹配任意子域名。你甚至可以更高级地使用正则表达式,尽管这种方法不太常见。例如:

 server_name ~^(?.+)\.example\.com$;

  保持设置清晰。如果您有多个子域,通配符通常会简化事情。始终确认 DNS 设置将流量定向到您的服务器的 IP 地址。

  NGINX 反向代理

  NGINX 反向代理的工作原理是接收流量并将其传递给另一项服务。这可以减少后端应用程序的直接暴露,并让 NGINX 处理 SSL 或速率限制。基本的 NGINX 反向代理配置可能如下所示:

  server {
      listen 80;
      server_name proxydemo.com;

      location / {
          proxy_pass http://127.0.0.1:4000/;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
      }
  }

  在此 NGINX 反向代理示例中,传入的流量proxydemo.com被转发到http://127.0.0.1:4000/。额外的标头可帮助目标应用程序查看原始主机和 IP 地址。如果需要负载平衡,可以定义多个服务器:

  upstream myapp {

  upstream myapp {
      server 192.168.1.50:4000;
      server 192.168.1.51:4000;
  }

  server {
      listen 80;
      server_name balancedsite.com;

      location / {
          proxy_pass http://myapp;
      }
  }

  设置负载平衡时,请记住将所有 keepalive 指令放在负载平衡算法之后:

  upstream myapp {
  server 192.168.1.50:4000;
  server 192.168.1.51:4000;
  least_conn; # Load balancing algorithm
  keepalive 32; # Keepalive connections
  }

  此 NGINX 反向代理设置将请求分发到 列出的服务器upstream,从而提高性能和可用性。这是一种无需重写核心应用程序即可轻松处理扩展的方法。

  NGINX 配置常见问题解答

  为什么我的更改没有显示出来?

  NGINX 仅在启动时或重新加载后加载其配置。因此,编辑后,请运行sudo systemctl reload nginx或sudo nginx -s reload。

  如何查看我的 NGINX 配置是否有效?

  用于nginx -t测试 NGINX 配置错误。如果出现错误,它会精确定位到文件和行号。

  为什么我的静态文件会返回 404?

  请检查你的root路径alias。位置块和目录之间的一个拼写错误或不匹配都可能导致文件丢失。

  如何提升速度?

  开启sendfile,尝试gzip on;压缩,并设置合理的超时时间。对于大流量,可以考虑使用负载均衡或缓存层。

  我可以在不冒停机风险的情况下进行测试吗?

  最好有一个临时环境。如果无法做到这一点,请逐步应用更改并密切关注日志。这样,您就可以快速发现任何问题。

华纳云 推荐文章
美国云服务器Nginx配置Gzip压缩提升加载速度 Nginx配置http和https的步骤 Nginx配置ssl证书的步骤流程 nginx配置了跨域不生效如何解决 linux怎么修改nginx配置文件 nginx配置不提示php错误如何解决 Nginx配置文件如何检测是否生效? Nginx配置txt、pdf、doc、xls等文件下载教程 Nginx配置SSL证书出错怎么办?
活动
客服咨询
7*24小时技术支持
技术支持
渠道支持