NGINX 是一种 Web 服务器,它正在成为越来越流行的 Web 托管选项,因为 Internet 上所有站点中有 16% 都在使用 NGINX。 随着客户需要能够更快地提供内容的 Web 服务器,这个百分比不断增加。 它还可以用于代理、反向代理、负载平衡等,具体取决于您加载到 NGINX 上的模块。 之间的显着差异之一 Apache (流行的网络服务器)和 NGINX 是每个系统处理访问规则的方式。 如果您熟悉使用 .htaccess 规则 Apache,那么 NGINX 使用的在服务器的 vhost 块中包含指令的方法将发生重大变化。
我们将展示如何将 .htaccess 重写规则转换为 NGINX 重写指令。 NGINX 重写指令也需要放在 server 块中。 许多服务器配置在 vhosts 文件中包含此服务器块信息,而有些使用单独的 NGINX 配置文件(有关 NGINX 配置文件的更多信息,请参阅使用 NGINX 重定向 URL)。 要完成这项任务,您需要了解一些基本的 NGINX 指令,我将在下一节中讨论。
NGINX 重写和返回指令介绍
NGINX 最常用的指令是 return 和 rewrite 指令。 使用 NGINX 指令时,可以将访问页面的客户端定向到不同的目录或不同的登录页面。 根据您指定的指令,请求也可以重定向到应用程序。 为了 example,从智能手机访问页面的客户可以被转发到专门为手机浏览器编码的脚本。 其他 example 将是基于 IP 或地理位置转发客户端,使您的站点特定于区域并根据位置为访问者量身定制。
NGINX 返回指令
return 指令比 rewrite 指令稍微简单一些。 最佳实践是尽可能使用此指令而不是 rewrite 指令。 您通常会将返回值包含在指定要重写的域的服务器上下文中。 我已经包括了一个常见的 example 以下。 访问该站点的客户端将被重定向到 301 状态代码之后指定的域。 使用该指令会将访问 www.BYNSStest.com 的客户端转发到 www.BYNSS.com。
server {
listen 80;
server_name www.BYNSStest.com;
return 301 $scheme://www.BYNSS.com$request_uri;
}
NGINX 重写指令
重写指令与 .htaccess 中的重写规则有些不同。 它需要放置在特定位置或服务器块中以重写 URL。 rewrite 指令通常用于执行较小的繁琐任务。 为了 example,它在某些情况下用于捕获原始 URL 中的元素或更改路径中的元素。 NGINX 重写指令可能会变得非常复杂,但是一旦您了解了基本语法,它就不会那么令人生畏了。 我在下面包含了 NGINX 重写指令的基本语法。
rewrite regex URL [flag];
重要的是要知道重写指令几乎总是会返回 HTTP 301 或 302 状态代码。 如果您需要您的 Web 服务器返回不同的状态码,则在重写后需要返回指令。 我已经包括了一个 example 下面从 NGINX 的重写模块文档.
server{
...
rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last;
return 403;
...
}
在这个 example 以 /download 开头,后跟 /media 或 /audio 的 URL 匹配。 之后,包含 /mp3 的目录 /media 和 /audio 元素将在 URL 中添加扩展名 .mp3 或 .ra 文件扩展名。 如果 URL 与重写规则不匹配,此返回指令将向客户端返回 403。
将 .htaccess 规则转换为 NGINX 指令
希望到此为止,我们对两个最常用的 NGINX 指令有基本的了解。 但是,学习这些规则需要一些时间,因为它们可能非常复杂。 学习正则表达式在这个过程中非常有帮助。 我们将通过将转换为 NGINX 指令的常用 .htaccess 规则的示例进行工作。
示例:重定向自 example.com 到 www。example.com
当客户端从您的服务器请求内容时,将 www 添加到 URL 可以帮助某些站点(例如托管在 WordPress 上的站点)更有效地运行。 完成此重写的常见 .htaccess 规则是:
RewriteCond %{HTTP_HOST} example.com
RewriteRule (.*)https://www.example.com$1
正如我们前面提到的,最好的做法是尽可能使用 return 指令。 下面我们将在 nginx.conf 中创建一个服务器块来完成与上面的 .htaccess 重写规则相同的任务。
server {
listen 80;
server_name example.com;
return 301 https://www.example.com
$request_uri;
}
server {
listen 80'
server_name www.example.com;
#...
}
在这个 example 将有两个用括号“{}”定义的服务器块。 我们告诉 NGINX 在端口 80 上监听请求 example.com。 然后返回一个301“重定向”到www。example.com。 我们通常将这些规则分成两个服务器块,以使这些指令尽可能高效。 第 2 个并不总是需要,但如果 www 将提供工作目录中的内容。example.com 被请求。 如果没有找到完全匹配,NGINX 然后检查是否有一个 server_name 带有一个匹配的起始通配符。 将选择以通配符开头的最长匹配来满足请求。
您可以通过运行以下命令来测试您的语法:
nginx -t
这允许您在加载配置文件中的更改并可能导致您的实时站点出现问题之前测试错误的语法。 编辑 NGINX 配置文件后,请务必使用守护程序重新启动 NGINX,或者只需运行以下命令。
nginx -s reload
示例:WordPress 永久链接
在这个 example,我已经包含了今天使用的最常见的一组 .htaccess 规则。 我在下面包含的规则允许 WordPress 使用永久链接。 这是默认安装在 WordPress 上的 Apache 服务器。 永久链接是一个旨在保持不变的 URL。 为了 exampledomainexample.com/blogexample.php 可以在您的浏览器地址栏中加载为 domainexample.com/blog。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond ${REQUEST_FILENAME} ~ - f
RewriteCond ${REQUEST_FILENAME} ~ - d
RewriteRule . /index.php [L]
<IfModule>
下面是 NGINX 等价物。 这里不需要返回或重写指令,因为我们只允许内容管理系统使用永久链接隐藏路径。 有关此任务的更多信息,请参阅NGINX 关于永久链接的文档.
location / {
try_files $uri $uri/ /index.php?$args;
}
您可以通过运行以下命令来测试您的语法:
nginx -t
这允许您在加载配置文件中的更改并可能导致您的实时站点出现问题之前测试错误的语法。 编辑 NGINX 配置文件后,请务必使用守护程序重新启动 NGINX,或者只需运行以下命令。
nginx -s reload
示例:强制 http 到 https
.htaccess 文件的另一个流行用途是强制浏览器通过 HTTP 使用 https 加载站点。 这允许浏览器通过确认该站点存在于它声称所在的服务器上来验证该站点是否存在安全风险(请参阅 什么是 SSL 证书?)。 它还可用于验证营业地点、营业 ID 号和营业地点。 这有助于防止访问可能对您的个人计算机或私人信息造成损害的恶意网站。
以下 .htaccess 规则将强制使用 https,以便使用端口 80 的请求 example.com 将被重定向到 https://www。example.com。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
为了使用 NGINX 完成此任务,我们将使用 NGINX 返回指令。
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
您可以通过运行以下命令来测试您的语法:
nginx -t
这允许您在加载配置文件中的更改并可能导致您的实时站点出现问题之前测试错误的语法。 编辑 NGINX 配置文件后,请务必使用守护程序重新启动 NGINX,或者只需运行以下命令。
nginx -s reload
结论
我们可以继续举例,但希望在这一点上,我们现在对将 .htaccess 转换为 Apache 到 NGINX 指令。 如果您需要有关完成这些任务的更多信息,您可以随时向我们的支持部门寻求帮助。 但是,我们并不完全支持 NGINX,它被认为是 超越范围 支持。 这意味着我们将尽可能地为您提供帮助,但我们可能无法解决您的问题,而是可能会将您转介给开发人员以获得更多帮助。 如果您想使用 NGINX 网络服务器来托管您的内容,我们有多种选择,包括我们的 VPS 阵容来满足您的业务需求。 NGINX 目前也正在开发用于 cPanel 服务器,尽管目前在生产环境中不支持或不推荐使用它。 看 cPanel 的博客 了解更多信息。
就像你看到的一样?
立即致电 1.800.580.4985 联系我们,与知识渊博的托管解决方案提供商交谈,他们可以为您提供所需的信息,以便立即做出明智的决定。
太忙没时间说话? 点击 这里 打开与我们的快速聊天以了解更多信息。 您想在闲暇时查看电子邮件中的信息吗? 立即给我们发送电子邮件,以获得关于我们产品线中哪种产品最适合您的需求的可靠建议。
我们期待您的回音!