🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本文介绍如何将NGINX配置作为Web服务器,并包括以下部分: 1. 设置虚拟服务器 2. 配置位置 3. 使用变量 4. 返回特定状态码 5. 重写请求中的URI 6. 重写HTTP响应 7. 处理错误 在高层次上,将NGINX配置作为Web服务器有一些问题需要了解,定义它处理哪些URL以及如何处理这些URL上的资源的HTTP请求。 在较低层次上,配置定义了一组控制对特定域或IP地址的请求的处理的虚拟服务器。 用于HTTP流量的每个虚拟服务器定义了称为位置的特殊配置实例,它们控制特定URI集合的处理。 每个位置定义了自己的映射到此位置的请求发生的情况。 NGINX可以完全控制这个过程。 每个位置都可以代理请求或返回一个文件。 此外,可以修改URI,以便将请求重定向到另一个位置或虚拟服务器。 此外,可以返回特定的错误代码,也可以配置特定的页面以对应于每个错误代码。 #### 1. 设置虚拟服务器 NGINX配置文件必须至少包含一个服务器指令来定义虚拟服务器。 当NGINX处理请求时,它首先选择提供请求的虚拟服务器。 虚拟服务器由http上下文中的服务器指令定义,例如: ~~~ http { server { # Server configuration } } ~~~ 可以将多个server指令添加到http上下文中以定义多个虚拟服务器。 server配置块通常包括一个listen指令,用于指定服务器侦听请求的IP地址和端口(或Unix域套接字和路径)。IPv4和IPv6地址均被接受; 下面的示例显示了监听IP地址127.0.0.1和端口8080的服务器的配置: ~~~ server { listen 127.0.0.1:8080; # The rest of server configuration } ~~~ 如果省略端口,则使用标准端口。 同样地,如果省略一个地址,服务器将侦听所有地址。 如果没有包含listen指令,则“标准”端口为`80/tcp`,“default”端口为`8000/tcp`,具体取决于超级用户权限。 如果有多个服务器与请求的IP地址和端口相匹配,则NGINX将根据服务器块中的server_name指令测试请求的主机头域。 server_name的参数可以是完整(精确)名称,通配符或正则表达式。 通配符是一个字符串,其开头,结尾或两者都包含星号`(*);` 星号匹配任何字符序列。 NGINX将Perl语法用于正则表达式; 在它们之前使用波浪号(〜)。 此示例说明了一个确切的名称。 ~~~ server { listen 80; server_name example.org www.example.org; ... } ~~~ 如果匹配主机头几个名称,则NGINX通过按以下顺序搜索名称并使用其找到的第一个匹配来选择一个: * 确切的名字(完整准确的名称) * 以星号开头的最长通配符,例如:*.example.org * 以星号结尾的最长通配符,如:mail.* * 第一个匹配正则表达式(按照出现在配置文件中的顺序) 如果主机头字段与服务器名称不匹配,则NGINX会将请求路由到请求到达端口的默认服务器。 默认服务器是nginx.conf文件中列出的第一个服务器,除非您将listen_server参数包含在listen指令中以明确指定服务器为默认值。 ~~~ server { listen 80 default_server; ... } ~~~ 一个完整的Nginx虚拟机配置示例,这里我们演示配置两个虚拟机,对应域名分别为:`vhost1.com` 和` vhost2.com`,vhost1.com网站的主目录在`/data/www/vhost1`,vhost2.com网站的主目录在`/data/www/vhost2`: ~~~ server { listen 80; server_name vhost1.com www.vhost1.com; index index.html index.html; root /data/www/vhost1; access_log /var/log/vhost1.com.log; } server { listen 80; server_name vhost2.com www.vhost2.com; index index.html index.html; root /data/www/vhost2; access_log /var/log/vhost2.com.log; } ~~~ #### 4. 返回特定状态码 一些网站URI需要立即返回具有特定错误或重定向代码的响应,例如当页面被暂时移动或永久移动时。 最简单的方法是使用return指令。 例如返回未找到的404状态码: ~~~ location /wrong/url { return 404; } ~~~ 返回的第一个参数是响应代码。可选的第二个参数可以是重定向的URL(代码301,302,303和307)或在响应体中返回文本。 例如: ~~~ location /permanently/moved/url { return 301 http://www.example.com/moved/here; } ~~~ 返回指令可以包含在 location 和 server 上下文中。 使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。 在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。 ~~~ error_page 404 /404.html; ~~~ 请注意,此伪指令并不立即返回该错误(返回指令执行该操作),而仅仅是指定发生时如何处理错误。 错误代码可以来自代理服务器,或者在NGINX处理期间发生(例如,当NGINX找不到客户端请求的文件时,显示404对应的结果)。 在以下示例中,当NGINX找不到页面时,它会将代码301替换为代码404,并将客户端重定向到`http:/example.com/new/path.html`。 当客户端仍尝试访问其旧URI的页面时,此配置非常有用。 301代码通知浏览器页面已经永久移动,并且需要在返回时自动替换旧地址。 ~~~ location /old/path.html { error_page 404 =301 http:/example.com/new/path.html; } ~~~ * * * * * https://www.yiibai.com/nginx/nginx-web-server.html