Me:一般来说nginx和FastCGI都是新手,如果这是一个很明显的老式的道歉,但是谷歌search给了我很多人推荐的随机configuration值,但没有人解释他们的决定背后的原因。 nginx worker_process和PHP-FPM worker之间有什么关系? 更多的nginx工作者意味着更多的PHP-FPM工作者,还是他们不相关? 我对这个如何在高层工作的理解是 用户请求一个网页 nginx处理请求,看到它是一个PHP页面 nginx提交给PHP-FPM PHP-FPM用现有的进程处理请求,或者产生新的请求 我不清楚PHP-FPM是否会产生一个新的subprocess,以及哪个nginx工作进程正在与之交谈。 即如果你有两个相同的Web服务器,一个worker_process = 4 ,另一个worker_process = 8 ,他们都看到相同的networkingstream量,一个服务器会创build更多的PHP-FPMsubprocess比另一个? 还是我在这里说了些蠢话,说明我错过了一个基本的概念? (如果是这样,什么?) 没有试图解决一个具体的问题 – 只是试图学习如何推理nginx和php-fpm的行为,所以我可以促成规模和性能头脑风暴/故障排除。
你好,谢谢你帮助我。 我最近添加了一个SSL证书到我的网站。 它工作了一点,但现在我得到了浏览器中“太多的redirect循环”。 我对服务器不是很了解(我在跟随一个在线指南),所以这可能只是一个新手的错误。 这里是文件: upstream app_server { server unix:/var/run/unicorn.sock fail_timeout=0; } server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 443 ssl; listen [::]:80 default ipv6only=on; root /home/example/public; server_name www.example.com; rewrite ^(.*) https://www.example.com$1 permanent; ssl_certificate /example.com.chained.crt; ssl_certificate_key /example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL; index index.htm index.html; location […]
我正在尝试configurationnginx,以便可以通过两个不同的URL访问相同的静态内容, 而无需任何redirect。 例如,如果客户端在浏览器中input/path/to/A ,我想要检索与/path/to/B相同的内容。 我尝试使用rewrite ,但Nginx似乎给了我一个301redirect在这种情况下。 例如: server { root /my/www/data; rewrite ^/path/to/A(.*)$ /path/to/B$1; # Note: /my/www/data/path/to/B *does* actually exist on disk. # However, the …/A version does not. } 我想这样做的一种方法是符号链接/my/www/data/A指向/my/www/data/B ,但我想这样做使用服务器configuration,而不是文件系统技巧。 我的问题是: 如何才能做到这一点? rewrite模块在什么情况下做内部redirect与发送30x代码给客户端? 我无法从文档中清楚地分辨出来。 注意:这与另外一个问题非常相似: Nxginx重写URL而不redirect但是,那个不是很详细。 编辑:这是一个真正的configuration, curl命令等: 首先,configuration: server { root /usr/share/nginx/www/mydata; index index.html index.htm; # Make site accessible from http://localhost/ server_name […]
我在使用中间CA(自行创build)时遇到了一些nginx客户机authentication的困难。 尽pipe相同的证书包(单个.pem文件中的中间+根证书)适用于IMAP(dovecot)和SMTP(后缀)中的客户端身份validation,但我似乎无法使其与nginx一起使用。 相反,我得到以下错误: [info] 23383#23383: *14583139 client SSL certificate verify error: (27:certificate not trusted) while reading client request headers, client: 82.39.81.156, server: <hostname>, request: "GET /mailboxes HTTP/1.1", host: "<hostname>" 据我了解,来自openssl的错误types27是X509_V_ERR_CERT_UNTRUSTED ,或某种特定用途的证书不可信的问题,但是我无法再详细说明。 个人和捆绑的证书似乎都用openssl verifyvalidation正确openssl verify (我可以validation客户端证书对中间或捆绑,中间证书validation根证书,即在我能想到的每个组合中都是有效的)。 为了validation我的客户端证书,我的根和中间CA应该使用正确的扩展名进行设置,以下是我的自定义openssl.conf文件的相关示例: [ v3_ca ] # Extensions for a typical CA (`man x509v3_config`). subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = […]
我想要url url /bar/111从目录/bar/111加载内容,但不能更改url。 我创build了一个重写规则,但不是加载正确目录的内容,而是301redirect到domain.com/bar/111 我的服务器configuration server { listen 80; server_name domain.com; location / { root /var/www/domain.com; index index.html index.htm; rewrite ^/foo-(.*)$ /bar/$1 break; try_files $uri $uri/ =404; } }
为了避免nginx 504网关超时,我试图在我的PHP代码的开始做到这一点: set_time_limit(0); 此外,我试图提高/etc/php/7.0/fpm/php.ini的时间设置: max_execution_time = 3600 max_input_time = 3600 在/etc/php/7.0/fpm/pool.d/www.conf : request_terminate_timeout=3600 在重新启动nginx之后,我仍然在3600秒之前收到请求时的504网关超时。 我还应该做些什么来避免它呢?
我有一个elasticbeanstalk环境,它使用nginx作为node.js应用程序的前端服务器。 该环境使用configuration为接受TCP:80 / SSL:443上的连接的弹性负载均衡器,并将其同时转发到TCP:8080上的nginx实例。 我正在使用TCP / SSL + ProxyProtocol而不是HTTP / HTTPS来支持websocket。 在使用TCP时,AWS ELB不允许使用URL来从负载均衡器进行运行状况检查。 我需要使用一个,否则它只检查nginx是否正在侦听8080,而不是如果我的node.js应用程序正在运行。 我正在寻找想法来使其工作。 目标是获取我的node.js应用程序运行状况检查URL,如果运行状况检查URL状态不是200,则使AWS ELB将实例标记为不健康。 我目前的想法是尝试搭乘nginx的健康检查支持,所以它违背nodejs,如果它检测到应用程序不健康停止听8080连接,所以ELB将标记为不健康的实例。 也许在nginx检测到健康/不健康的实例时运行一个命令就足够了。 那可能吗? 任何其他的想法?
首先,我对nginx有点新东西,有点失落……我可惜没有find任何解决办法,所以这是我的问题。 如果这是一个已经存在的问题的重复,我很抱歉,我会很高兴看到答案。 我正在构build我的第一个nginx服务器,我有两个域名,其中一个有很多子域名,我希望在所有这些域名上加上SSLredirect。 问题是,它只能在IPv6监听(这里是默认configuration)下工作一次,如果我把相同的configuration放在其他子域上,nginx不会启动(每个子域都有自己的80→443的服务器configuration文件服务器redirect)。 server { listen 443; listen [::]:443; ## All the config and stuff } server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name www.mydomainna.me mydomainna.me; rewrite ^ https://$server_name$request_uri? permanent; } 这是默认的configuration文件,它像一个魅力。 但是,这是让我感到困惑的是,在这个完全相同的configuration(lessdefault_server)每个单一的子域和我的第二个域名,我必须删除IPv6或Nginx不想开始。 server { listen 443; listen [::]:443; ## All the config and stuff } server { listen 80; server_name subdomain.mydomainna.me; […]
我想阻止访问隐藏的.dot文件,特别是Nginx的php文件,但我找不到解决scheme。 .ht文件在默认情况下隐藏,如下所示: location ~ \.ht { deny all; } 我写了这个规则来匹配以dot开头的所有文件,但它不工作: location \.(.+\.*)(.*)\.(.+\.*)(.*)$ { deny all; } 这里是一些应该隐藏的文件的例子 /.foo.php /path/to/.foo.php 我该怎么办?
看起来,在HTTPS连接上configurationHAProxy进行主机名路由时,至关重要的是包含一个tcp-request inspect-delay指令来“让HAProxy有机会查看连接”。 有没有办法让NGINX一样,或者我应该开始打包,并将我的整个服务器移动到HAProxy? (作为参考,这个问题来自我此前expression的误解) 编辑 迈克尔在评论中说: 他似乎希望从客户端的握手尝试中“嗅探”SNI,而不实际终止TLS连接,以便作出低层的连接代理决定,并盲目地将有效载荷传送到后续的terminal机,以终止TLS,因为某些原因,他不希望代理上的TLS证书和密钥,或代理完成TLS – 只需嗅探SNI,并使用从其内容派生的规则build立内部TCP连接。 理由是我需要后端应用程序中的证书和密钥(有些需要这个或那个原因),所以我必须提供给他们。 不得不在代理中设置它们本质上是维护工作的两倍,并且有可能出现错误。 如果我不能保持对代理证书的访问,就会使我的架构变得更容易,并减less错误的机会。