我正在使用良好的“ Cloudflare ”反向代理背后的IIS服务器。 此反向代理服务器场向我的服务器公开一个HTTP头,即HTTP_CF_CONNECTING_IP 。 它包含连接到Cloudflare的IP,所以我可以看到谁在连接。 现在我当然想logging这些IP。 Cloudflare有一个小小的web.config脚本,它使用IIS REWRITE选项来更改REMOTE_ADDR服务器variables。 <rules> <clear /> <rule name="Replace REMOTE_ADDR with CF_CONNECTING_IP" enabled="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_CF_CONNECTING_IP}" pattern="\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" /> </conditions> <serverVariables> <set name="REMOTE_ADDR" value="{HTTP_CF_Connecting_IP}" /> </serverVariables> <action type="None" /> </rule> </rules> 这实际上是否影响日志? 另外:这是否影响我在运行时查看请求IP时获得的内容,例如,ASP.NET应用程序或PHP脚本? 如果是这样,为什么存在: http : //devcentral.f5.com/weblogs/Joe/archive/2009/12/23/x-forwarded-for-http-module-for-iis7-source-included.aspx 当我们只能使用IIS重写时,这个好处是让我得到了什么?
我发现,我们的networking服务器上的网站之一是有部分url被剥夺。 具体而言,当用户点击链接以幻灯片的forms显示图像时,该页面的URL有?show=slide append。 只是这个部分就是被剥离的东西。 除了这个问题,该网站正常工作。 此外,该网站曾经正常工作,我真的不知道在什么时候打破了,因为我很less访问它,唯一出现在我的更改日志是更新WordPress及其插件。 我已经证实,这不是由.htaccess文件中的任何内容造成的,因为我在开发服务器上安装了一个完全相同的站点副本,并按照预期运行。 我也已经将Apache虚拟主机configuration复制到了testing服务器上。 现场和开发服务器之间唯一的显着区别是前者是Centos 5.5,另一个是Debian 6.0。 我被卡住的想法。 如果它不是Apache虚拟主机configuration或.htaccess文件,我还能在哪里查找可能导致此问题的原因? 更新 虽然对于一个纯粹的人来说,确实出现了URL的一部分被吃掉了,原来是mod重写和301redirect。 这是一个误导性的症状。 有问题的网站运行WordPress的插件数量。 主代码的固定链接重写和其中一个插件的固定链接重写不相互影响,并且不能很好地一起玩。 一堆卸载和重新安装,连同永久固定链接一起,终于得到了一切正常工作。 实际上,显然正在消失的那部分URL是错误的,导致网站上的一个破坏的function。
nginx wiki指出: 中断 – 完成当前重写指令的处理,非重写处理仅在当前位置块内继续。 这是说: 如果重写模式匹配,则处理重写(重写为目标),但不处理位置块中的任何其他规则,并处理位置块中的所有其他(caching,代理等)指令? 我正在谈论的rest标志按照: PATTERN目标标志 不是“rest” 指示。 更新: 我正在考虑使用这个场景如下,一个简单的位置有多个重写: location /path/ { rewrite ^/user_request_one$ /target_one; rewrite ^/user_request_two$ /target_two; … other directives … } 也许我不完全理解nginx如何处理重写,但在上面,如果target_one匹配,nginx仍然会testing重写规则target_two? 将一个break标志添加到target_one指示nginx停止parsing任何进一步的重写规则? 我所要求的主要原因是因为我们有一些重写规则的位置块,我不确定天气nginx正在testing重写模式“进一步下降”,即使一个匹配“靠近顶部”。 这些重写是非常独特的,所以如果被打中,nginx绝对没有理由在同一个位置块中testing任何其他的。 我们只是想确保我们不浪费任何宝贵的CPU周期,因为这是一个相当负载的服务器。 希望这可以帮助。 谢谢。
我试图将这些规则从Apache重写转换为nginx: RewriteRule ^([^/]+)/([^/]+)?$ api.php?version=$1&call=$2 [L] 我尝试在nginxconfiguration中添加以下内容: rewrite ^([^/]+)/([^/]+)?$ api.php?version=$1&call=$2 但是当我访问我的网站时,我只收到一个404错误。 我希望我的url看起来像: http://mysite/1.0/Something 我如何将这些规则转换为nginx?
我一直没有find符合我的特定情况的问题,所以希望这不是重复的,如果是的话,我表示歉意。 负载平衡器后面有4个Web服务器。 我只想要www.mydomain.com,123.123.123.123(我的服务器的公共IP地址)和456.456.456.456(我的服务器的内部networkingIP地址)工作,其他任何东西都应该redirect到www.mydomain.com。 为什么:我需要将所有内容发送到www.mydomain.com,因为我们已经有人build立了指向我们IP地址的其他域名(www.otherdomain.com),所以它就像我们网站的一面镜子。 我们不知道他们为什么这样做,但Google开始抓取他们的网站,就好像它完全是一个不同的网站,并造成麻烦。 我需要允许服务器的IP地址,因为我们通过一个自定义的API来使用服务器的内部聊天来绕过负载平衡器。 我能find的唯一的解决scheme,包括IP地址redirect到www.mydomain.com,或者他们最终没有redirect。 这是我目前的configuration(截断简单): server { listen 80; server_name www.mydomain.com 123.123.123.123 456.456.456.456; } server { listen 80 default; server_name _; rewrite ^ http://www.mydomain.com$request_uri?; } 预期:请求到正确的域或IP地址匹配第一个规则。 所有其他请求匹配第二条规则并redirect。 实际:根本没有得到redirect,我假设,因为NGINX只是匹配的IP地址,无论域到第一条规则。 也可能是负载平衡器搞砸了? 如果有帮助,我正在使用Rackspace云负载平衡器。 我也试过这个configuration: server { listen 80 default; server_name www.mydomain.com; } server { listen 80; server_name _; rewrite ^ http://www.mydomain.com$request_uri?; } 这与之前的结果相同。 似乎没有任何redirect。 任何想法如何我可以解决这个问题? […]
我有一个Wordpress安装名称的奇怪冲突,我需要写一些Nginx规则来修复它。 我曾经在Wordpress页面/项目中列出我的软件项目,并链接到子页面/ projects / aprojectname , / projects / anothername等。 最近,我购买了一个自定义posttypes的主题组合项目。 它被称为项目 (注意缺less的 )。 在/项目 ,我访问所有项目职位的默认Wordpress列表。 然后,我可以使用/ project / aprojectname , / project / anothername等来访问post 到现在为止还挺好。 问题是我想使用新的/项目结构保留任何以前的链接到我/项目/东西。 此外,我想只保留/项目页面(不redirect)。 这是我想要完成的。 该URL /项目 只应该redirect到/项目 ,以便我可以显示一个WordPress的页面,而不是“丑陋的”Wordpress的职位列表。 因此,URL /项目不应该被处理。 它应该显示相应的Wordpress页面。 但是, / projects / something中的所有 URL 都应该redirect到/ project / something 这是我迄今为止的nginx规则。 location ~ ^/projects/(.*) { return 301 http://$server_name/project/$1; } […]
简要 我目前正在进行一个项目,将我们的两个托pipe服务器(一个电子邮件,一个networking)内部运行,与我们的其他Web服务器一起运行。 托pipe一个Web服务器是相当简单的,但是我需要帮助我如何能够将stream量转移到正确的服务器,一旦到达我们的networking。 我读过一个代理服务器会做到这一点。 我将使用IIS 7.5与应用程序请求路由和URL重写。 我一直在尝试不同的方法,但是我没有取得任何成功,所以我必须要失去一些东西。 我会使用URL重写将外部Web地址更改为正确的服务器的内部IP地址,然后为该服务器上的每个单独的网站更改一个不同的端口? 或者说有可能说example.com的URL去了这个内部IP,而company.com的URL去了这个IP? 当前设置 两台外部服务器正在运行Plesk 10和11.它们托pipe多个网站以及与这些网站相关的电子邮件。 两个例子: example.com – [email protected] company.com – [email protected] 我们目前在运行IIS 6的IP 192.168.1.5内部托pipe一台Web服务器。该服务器包含company.com的子域网站: one.company.com two.company.com 我们的路由器将端口80上的传入stream量转发到192.168.1.5 所需的安装程序 我们将路由器将端口80上的传入stream量转发到IP.6 IP.6上的服务器将运行带有应用程序请求路由和URL重写的IIS 7.5。 我希望此服务器将stream量引导至以下任一服务器。 一个IP.5服务器取代我们目前的内部networking服务器将运行IIS 8并为company.com托pipe子域网站: one.company.com two.company.com 一个IP.11服务器取代我们目前的外部networking服务器将运行Plesk 12托pipe许多网站,包括: – example.com company.com 正如我在简报中所提到的,我们也将转移我们的电子邮件服务器。 这将位于IP.10运行Plesk 12.我是否正确,我还需要路由器将端口25和143上的传入stream量转发到IP.10 ? 这台服务器将主办的networking邮件网站: mail.example.com mail.company.com
我有一个问题,Apache传递给PHP $_SERVER['REQUEST_URI']variables的URL重写后,而不是原来的请求。 我正在做这个重写,因为我有一个WordPress的网站,并希望将其移动到一个子目录,而不是在根path中,但仍然希望保持其URL为根URL。 这并不一致。 如果我请求www.xyz.com/wp-admin它将使用www.xyz.com/wordpress/wp-admin (这是重写后的URL)填充PHP REQUEST_URIvariables,但是如果我请求www.xyz.com/wp-admin/ (带有斜线),它实际上使用www.xyz.com/wp-admin/ (原始URL,在重写之前)填充PHP REQUEST_URIvariables。 我想要的是在REQUEST_URI被重写之前填充URL。 我的.htaccess文件如下: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$ RewriteCond %{REQUEST_URI} !^/wordpress/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /wordpress/$1 RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$ RewriteRule ^(/)?$ wordpress/index.php [L] </IfModule>` PHP版本是5.3。 Apache版本是2.4(Win32)。 更新 :我更深入地研究它,当我inputurlwww.xyz.com/wp-admin首先有一个301redirect到www.xyz.com/wordpress/wp-admin/但是这不会发生www.xyz.com/wp-admin/ (带有斜线)。 对于具有斜线的那个,只有重写,如预期的那样。 所以现在的问题是为什么301redirect发生在URL的第一个地方没有结尾的斜杠。 为了澄清,没有实际的文件夹/wp-admin/ ,但是有一个文件夹/wordpress/wp-admin/ 。
我对.htaccess挺.htaccess而我只是没有深入了解发生了什么事情。 服务器只是说,即使我看不到任何理由“redirect”,超过了10个内部redirect的限制。 它只发生在我尝试使用/users/Username , /users/显示一个错误,该用户无法find这是我想要的, /users/Username引发500内部服务器错误。 文件本身是好的,数据库检查也应该工作。 .htaccess文件是: RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) $1\.php [L] IndexIgnore * ErrorDocument 400 / ErrorDocument 404 / RewriteRule ^users/([a-zA-Z0-9_-]+)/?$ users.php?id=$1 [NC,L]
这是一个屁股问题的痛苦! 天才解决这个谜语将获得贝宝捐赠吃两个晚餐。 现在让我们开始吧。 鉴于:大多数代理,不要caching资源与“?” 即使在响应中存在Cache-control:public头部,它们的URL也是如此。 要为这些资源启用代理caching,我必须从对静态资源的引用中删除查询string,而不是将参数编码到文件名称中。 以前有过 <img src="/imgcpu?src=folder1/photo_citty.jpg&w=3500&h=10&c=p&q=90" /> <img src="/imgcpu?src=folder2/photo_doggy.jpg&w=100&h=200&c=p" /> <img src="/imgcpu?src=folder3/photo_birds.jpg&w=200&h=500&f=bw" /> <img src="/imgcpu?src=folder3/photo_frogs.jpg&h=200" /> 工作中 <img src"/IMG-folder/photo_w100_h100_cf_q60.jpg"/> 图像将驻留在根目录下的1个文件夹中(永远不会更深) img.php?src =或者img?src =将永远被永远命名 在…. jpg&w,&h,&q,&m,&f和&c是调用variables的唯一字母(例如:&w = 200&h&= 50&c = p&f = bw&q = 90) 在这个不雅的代码的成本 # Rewrite imgcpu?src= thumbnail maker to nice static urls RewriteCond %{REQUEST_URI} ^IMG.*$ RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_q(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&q=$5 [L] RewriteRule […]