我想在 nginx 中创建一个规则来做两件事:
有很多关于如何单独执行这些操作的示例,但我无法找到一个正确执行这两项操作的解决方案(即不创建重定向循环并正确处理所有情况)。
它需要处理所有这些情况:
1. http://www.example.com/path
2. https://www.example.com/path
3. http://example.com/path
4. https://example.com/path
Run Code Online (Sandbox Code Playgroud)
这些都应该在https://example.com/path (#4) 结束而不循环。有任何想法吗?
我确定以前有人问过这个问题,但我找不到有效的解决方案。
一个网站切换了CMS服务,但是域名相同,如何设置单个页面的nginx重写?
例如
http://sitedomain.co.uk/content/unique-page-name
http://sitedomain.co.uk/new-name/unique-page-name
请注意,我不希望内容页面中的所有内容都被重定向,而实际上只是上面提到的 url。我有大约 9 个重定向要设置,其中不适合某个模式。
谢谢!
编辑:我找到了这个解决方案,它似乎有效,除了它没有斜线重定向:
if ( $request_filename ~ content/unique-page-name/ ) {
rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}
Run Code Online (Sandbox Code Playgroud)
但这会重定向到:
http://sitedomain.co.uknew-name/unique-page-name/
nginx 网络服务器似乎有两个活动分支:一个“主线”分支(当前为 1.9.x)和一个“稳定”分支(当前为 1.8.x)。谁能提供官方资料来描述这两个分支之间的区别以及如何在它们之间进行选择?
是什么这三个变量的Nginx之间的差异$host,$http_host以及$server_name?
我有一个重写规则,我不确定应该使用哪一个:
location = /vb/showthread.php {
# /vb/showthread.php?50271-What-s-happening&p=846039
if ($arg_p) {
return 301 $scheme://$host/forum/index.php?posts/$arg_p/;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个答案,不仅要说“在重写规则中使用 ___ 变量”,还要解释它们之间的理论差异。
我不明白 break 和 last (重写标志)之间的区别。文档相当深奥。我试图在我的一些配置中在两者之间切换,但我无法发现任何行为差异。有人可以更详细地解释这些标志吗?最好有一个例子,当将一个标志翻转到另一个时显示不同的行为。
HTTP标头的维基百科描述X-Forwarded-For是:
X-Forwarded-For:client1、proxy1、proxy2、...
该指令的 nginx 文档real_ip_header部分内容如下:
该指令设置用于传输替换 IP 地址的标头的名称。
在 X-Forwarded-For 的情况下,此模块使用X-Forwarded-For 标头中的最后一个ip 进行替换。[强调我的]
这两种描述似乎相互矛盾。在我们的场景中,X-Forwarded-For标头与所描述的完全一样——客户端的“真实”IP 地址是最左边的条目。同样,nginx 的行为是使用最右边的值——很明显,它只是我们的代理服务器之一。
我的理解X-Real-IP是它应该用于确定实际的客户端 IP 地址——而不是代理。我是否遗漏了什么,或者这是 nginx 中的错误?
而且,除此之外,是否有人对如何使X-Real-IP标题显示最左边的值有任何建议,如 的定义所示X-Forwarded-For?
现在我有这个配置:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我访问www.mysite.com/phpmyadmin(注意缺少尾部斜杠),它不会找到我要查找的 404。我假设是因为我不包含尾部斜杠。我怎样才能解决这个问题?
已经有一个 很大 的 谈论关于相对于一个安全问题cgi.fix_pathinfo与Nginx的(通常是PHP-FPM,快速CGI)使用PHP选项。
结果,默认的 nginx 配置文件曾经说:
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
Run Code Online (Sandbox Code Playgroud)
但是,现在,“官方”Nginx wiki声明无需禁用上述 PHP 选项即可正确处理 PATH_INFO。所以呢?
cgi.fix_pathinfo什么的吗?(官方文档只是说:“有关 PATH_INFO 的更多信息,请参阅 CGI 规范”)PATH_INFO和SCRIPT_FILENAME变量做什么?我试图在每一步都理解这个问题。例如,我不明白为什么使用 php-fpm Unix 套接字可以避免这个问题。
nginx配置中location块后面的波浪号是什么意思?
例如
location ~ ^/download/(.*)$ {
alias /home/website/files/$1;
}
Run Code Online (Sandbox Code Playgroud)
有和没有 和有"~"什么不一样 ?
显然,我不应该花费不眠之夜试图调试应用程序。我想重新启动我的 nginx 并发现它的配置文件是空的。我不记得截断它,但胖手指和减少注意力可能起到了作用。
我没有那个配置文件的备份。我知道我应该做到的。
对我有好处,当前的 nginx 守护进程仍在运行。有没有办法将其配置转储到稍后会理解的配置文件中?