Articles of nginx

独立/单独的服务器作为其他节点的PHP处理器

根据我在各种文档和示例configuration中看到的,您可以将PHP-FPM设置在不同的服务器/硬件上,与您的networking服务器(在我的情况下为nginx)分开。 虽然大多数例子都列出了一些变化: location ~ \.php { [various parameters] fastcgi_pass 127.0.0.1:9000; } 你可以将fastcgi_passredirect到任何IP地址(192.168.1.10是安全的,或者200.55.35.40,发疯!),从而将PHP处理委托给不同的服务器。 我的问题是:那些单独的服务器必须在其文件系统中可访问PHP文件,对吧? 如果是的话,如何configurationPHP的根目录来查找文件,因为它通常是在nginx的configuration(在我的情况下)。 是通过chroot和chdir参数在池configuration或任何我发送SCRIPT_FILENAME从nginx? 现在最有趣的部分(对我来说):如果在该服务器上的文件是不必要的(并且nginx提供文件到fastcgi_pass中的ip:port),包括工作? 我只是想设置一堆PHP-FPM服务器,让他们承担Wordpress多站点节点的处理负载,而不需要来回交换大量的东西。

使用nginx防止304未修改的请求

我正在运行nginx,并有以下块到期: expires 52w; 但是,当我使用Google Chrome浏览器开发工具观察networkingstream量时,一些资产从caching(200-从caching)加载,而大多数资产正在向服务器发出请求(304未修改)。 如果可能,我想从caching中加载所有资源,而不与服务器进行通信。 (200-从caching) 什么是我的nginxconfiguration所需的更改?

nginx + apache2.4 + php-fpm – SERVER 和php_admin_value

我试图让服务器的工作方式nginx-> apache2.4-> php-fpm(通过mod_proxy_fcgid)(为服务静态文件的nginx)(我不知道现在甚至需要Apache)。 它的工作,但我没有几个问题。 当我用apache2.2作为apache模块(在旧服务器上)时,我可以为每个虚拟主机设置php_admin_value,例如php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]" 。 现在,当我使用php-fpm时,apache不理解这些,并且不会启动。 如何在使用php-fpm时为每个虚拟主机设置这些值? 第二个问题是,我如何使_SERVER [“REMOTE_ADDR”]填充真正的远程地址? 用nginx + apache + php作为apache模块,用mod rpaf解决,但是现在_SERVER [“REMOTE_ADDR”]显示127.0.0.1。 最后一个问题。 如果我决定只去nginx + php-fpm什么“基本”的function,我会丢弃阿帕奇丢失? 更新1。 显然mod_rpaf没有做它应该做的事情。 Apache实际上为2.4提供了类似function的官方mod。 如果有人也需要它,这里是你如何得到它: 1. wget https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/metadata/mod_remoteip.c 2. apxs -cia mod_remoteip.c 3.启用mod LoadModule remoteip_module usr / lib / apache2 / modules / mod_remoteip.so 4.configurationmod <IfModule remoteip_module> RemoteIPHeader X-Real-IP […]

在位置{}块中指定nginx的ssl_certificate

对于Web服务,我们有两个证书:myservice.com和api.myservice.com。 两者都具有相同的应用程序(文档根目录),但通过具有不同证书的HTTPS进行服务器。 不幸的是,我们现在还没有双域证书。 目前,我必须定义两个服务器块,每个块指向同一个根。 唯一的区别是ssl_certificate指令,但只能在http或服务器级别声明 。 不过,有没有办法避免在服务器块中复制/粘贴? 这是一个示例代码: server { listen 443; server_name .myservice.com; root /var/www/myservice.com/public; include conf.d/common.conf.inc; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; ssl_session_cache shared:SSL:5m; ssl_session_timeout 10m; ssl_certificate /path/to/myservice.com.bundle.crt; ssl_certificate_key /path/to//myservice.com.key; ssl_prefer_server_ciphers on; } server { listen 443; server_name api.myservice.com; root /var/www/myservice.com/public; include conf.d/common.conf.inc; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; […]

nginx反向代理(HTTPS)背后的nginx(基本authentication)如何使git推工作?

我喜欢在没有直接互联网访问的计算机(后端)上安装git服务器。 应该有基本的authentication。 该访问应该可以通过另一台计算机上的反向代理(前端)来实现,该计算机执行SSL / HTTPS。 两者都在运行Debian 7 stable(对于nginx和git来说,是wheezy + wheezy-backports)。 到目前为止,所有的东西(= git clone )都能工作,但是git push : $ git push –set-upstream origin master Username for 'https://myfrontend:443': myusername Password for 'https://myusername@myfrontend:443': error: Cannot access URL https://myserver:443/git/gittest.git/, return code 22 fatal: git-http-push failed 后端nginx日志中的错误消息是: 2014/04/01 01:00:00 [error] 27000#0: *7 no user/password was provided for basic authentication, client: myfrontend, […]

我如何拒绝所有不是来自cloudflare的请求?

我最近从多个代理服务器ips获得拒绝服务攻击,所以我安装了cloudflare来防止这种攻击。 然后,我开始注意到他们正在通过直接连接到服务器的IP地址并伪造主机头来绕过cloudflare。 返回403不是来自cloudflare使用的18个IP地址的连接返回403的最高性能方法是什么? 我试图deny一切,然后明确allow cloudflare ips,但这是行不通的,因为我已经设置,以便CF-Connecting-IP设置IP allowtesting。 我正在使用nginx 1.6.0。

Elastic Load Balancer后面的nginxnetworking服务器上基于IP的白名单

我在AWS的弹性负载平衡器后面运行nginx webservers。 真正的IP是通过X-Forwarded-For获得的。 面临的问题是如何使用这个来拒绝所有特定地点的特定来源的白名单。 例如:location / test / {include /etc/nginx/allowed-XForwardedFor.conf; 否认一切; } 我可以用variables来捕获X-Forwarded-For IP,然后在conf文件中使用它,或者以某种方式在位置上使用allow选项来使用它,或者在if条件的帮助下使用它吗?

403尝试访问nginx的文档根目录中的文件夹时被禁止

当我访问index.php时,它工作正常。 但是在localhost / pset7上,它给了403。 这里是权限日志, -rw-r–r–. 1 root root 51 Jul 31 14:21 index.html -rw-r–r–. 1 root root 51 Jul 31 14:15 index.php drwxrwxr-x. 5 my_user my_user 4096 Jul 31 15:13 pset7 我需要在networking服务器上运行它,所以请告诉我如何设置正确的权限并解决此问题。 在CentOS上使用LEMP。 如果你需要任何其他信息/日志,只要问。 Edit1,nginx config- http://pastebin.com/K3fcWgec 谢谢。

Nginx / Apache:只有当X-Forwarded-Proto是https时才设置HSTS

我得到了以下设置: Internet => nginx[public:80 +443, SSL termination) => Varnish[localhost:81] => Apache[localhost:82] 现在有些网站只能通过HTTPS和有效的SSL证书进行访问。 对于这几个例外,我想激活HSTS,无论是nginx(首选,或在Apache)。 问题: 在nginx上, if Host = foo.tld则需要一些逻辑,然后设置Strict-Transport-Security xxx ,但根据http://wiki.nginx.org/IfIsEvil, if在某个location 在Apache上,我需要类似于if X-Forwarded-Proto 443 set Strict-Transport-Security xxx ,但我似乎不能用SetEnvIf (Apache 2.2) 我的逻辑是否有缺陷? 另一种方法的想法? 这是当前活动的configuration: nginx的 服务器{ server_tokensclosures; 听xx.xx.xxx.xxx:80; server_name localhost; 位置 / { proxy_pass http://127.0.0.1:81; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto […]

我应该在nginx中使用rewrite还是proxy_pass?

Apache的文档很清楚地表明, mod_rewrite应该只是最后一招。 对于nginx ,陷阱部分有request_uri基本不变的例子。 情况是这样的: 我们(研究所的一个部门)有一个即将升级的主networking服务器(正在运行Debian 6)。 为了处理升级,我已经build立了一个nginx服务器,它将代理已知可以正常工作的部分升级服务器,而其他部分则服务于旧服务器。 旧的服务器有一些ProxyPass规则(大量的代理工作)。 我希望将所有这些都转换为nginx ,因为据我所知, nginx在代理中更具性能。 大量用户的用户主目录由另一台服务器提供服务。 对于这些用户,可以使用代字号和非代字号(即http://my.site/muru和http://my.site/~muru代理到http://other.server/~muru ,但http://other.server/muru不存在)。 许多文件夹被代理到同一台服务器上的不同文件夹。 (例如, http://my.site/local-club : http://my.site/local-club将被代理到http://my.site/~local-club )。 我的主要问题是: 鉴于A和B都被代理到不同的服务器上的C,我应该使用rewrite或location与returnredirectB到A请求,或继续代理? 给定A和B在同一台服务器上,B代理到A,我应该使用重写还是将Bredirect到A? redirect(和return )具有清楚地指示两个目录之间的关系的好处。 我的rewrite规则如下所示: rewrite ^/B(/.*) /A$1 permanent; 和return规则: location ~ ^/B(/.*) { return 301 /A$1; } 附: location ~ ^/~(A|D|E|F..)/ { proxy_pass https://other.server; proxy_redirect default; }