Questions tagged «nginx»

Nginx(“ eNgine x”)是一种轻量级的高性能HTTP服务器,反向代理,TCP流代理和邮件代理,在类似BSD的许可证下发布。

2
优先于IPv6的IPv4传入连接
我们运行一项社会/本地服务,该服务得益于对用户IP进行地理位置定位。问题在于,与IPv4相比,使用IPv6进行地理位置定位要重要得多。 在使用nginx的Ubuntu主机上,是否有办法优先使用传入连接而不是IPv6?配置看起来像这样: server { listen 80 default_server; listen [::]:80 ipv6only=off default_server; }
11 nginx  ipv6  ipv4 

5
Docker-分别缩放Nginx和php-fpm
我一直在玩docker和docker-compose,有一个问题。 目前我的docker-compose.yml看起来像这样: app: image: myname/php-app volumes: - /var/www environment: <SYMFONY_ENVIRONMENT>: dev web: image: myname/nginx ports: - 80 links: - app volumes_from: - app 应用程序包含端口9000上的php-fpm和我的应用程序代码。Web是nginx,具有一些配置。 这可以实现我期望的功能,但是为了将nginx连接到php-fpm,我有这条线: fastcgi_pass app:9000; 我如何有效地扩展呢?例如,如果我想运行一个nginx容器,但运行三个app容器,那么我肯定要有三个php-fpm实例,所有实例都试图在端口9000上侦听。 如何在每个给定时间将每个php-fpm实例放在不同的端口上,但仍然知道它们在我的nginx配置中的位置? 我采用错误的方法吗? 谢谢!
11 nginx  php  php-fpm  docker 

1
nginx if位置内的语句返回404
以下块 location / { if ($http_origin ~* (https?://[^/]*\.example\.com(:[0-9]+)?)) { add_header 'Access-Control-Allow-Origin' "$http_origin"; } try_files $uri $uri/ /index.php?$args; } …导致404,因为上述代码从未到达try_files指令,因此: 这与nginx 的IfIsEvil有关吗? 如果是,那么是否还有其他方法可以http_origin通过不使用if语句来测试? 我已经尝试使用nginx> 1.4(1.4.6,1.7,1.7.8)来进行此操作。
11 nginx  cors 

2
奇怪的Bittorrent在我的服务器上登录
我不知道以下日志是否与我的网站宕机有关。我的服务器上有很多网站,但没有以下日志: 117.169.1.85 - - [03/Jan/2015:23:21:37 +0800] "GET /announce.php?info_hash=%D0%A2M%CE%13%21H%D4%11%0C%8C%27%22%C83%B4%A3l%92%15&peer_id=%2DSD0100%2D%C50%95xmh%9B%13%7C%D42%F7&ip=39.178.24.33&port=14940&uploaded=3893629&downloaded=3893629&left=1369695469&numwant=200&key=1490&compact=1 HTTP/1.1" 404 162 "-" "Bittorrent" 115.231.228.252 - - [03/Jan/2015:23:21:37 +0800] "GET /announce.php?info_hash=%DE%82%BC%CFBmH%29e%FD%25%ED6b%F2%2DX%EE%BE%21&peer_id=%2DSD0100%2D%BF3%DAG%83%1F%DAGnV%E3%C8&ip=118.134.134.210&port=13567&uploaded=675282944&downloaded=675282944&left=80740352&numwant=200&key=7916&compact=1 HTTP/1.0" 404 162 "-" "Bittorrent" 115.231.228.252 - - [03/Jan/2015:23:21:37 +0800] "GET /announce?info_hash=%DE%82%BC%CFBmH%29e%FD%25%ED6b%F2%2DX%EE%BE%21&peer_id=%2DSD0100%2D%BF3%DAG%83%1F%DAGnV%E3%C8&ip=118.134.134.210&port=13567&uploaded=675282944&downloaded=675282944&left=80740352&numwant=200&key=16205&compact=1 HTTP/1.0" 404 20283 "-" "Bittorrent" 123.123.126.154 - - [03/Jan/2015:23:21:37 +0800] "GET /announce.php?info_hash=%AA%21U%8F%7F%BA%DC%8F%D2%A5%B5A%7B%26t%F7%2A%FF%1E%8C&peer_id=%2DSD0100%2D%91%11%E7%11G%7B%8C%EB%14Y%2B%26&ip=123.123.126.154&port=12070&uploaded=129742857&downloaded=129742857&left=85310&numwant=200&key=11590&compact=1 HTTP/1.0" 404 162 "-" "Bittorrent" 114.86.129.8 …

2
Nginx仅使用php-fpm在php脚本上抛出404
我已经使用nginx+ 安装了测试服务器php-fpm。我已经尝试了以下所有方法: Nginx + Php5-fpm无法呈现php文件 nginx + php fpm-> 404 php页面-找不到文件 访问PHP文件时,nginx抛出404错误 总结一下我尝试过的: 重新安装。 更改脚本特权(将其更改为0777)。 fastcgi_intercept_errors on。 检查root指令的层次:server,location和location ~ \.php。 检查fastcgi_param SCRIPT_FILENAME指令。 服务器在(且仅在).php脚本上返回404 。我可以将它们重命名为.html,就可以了。我该怎么办? 这是我的nginx.conf: user nginx; worker_processes 1; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] …
11 nginx  php-fpm 

1
nginx在65k字节后终止连接
我已经将nginx配置为在gunicorn下运行的Python应用程序的前端,但是nginx在发送了大约65k数据后终止了连接。 例如,我有一个看起来像这样的视图: def debug_big_file(request): return HttpResponse("x" * 500000) 但是,当我通过nginx访问该URL时,只能得到65283字节: $ curl https://example.com/debug/big-file | wc … curl: (18) transfer closed with outstanding read data remaining 0 1 65283 请注意,直接访问gunicorn时,一切都会按预期进行: $ curl http://localhost:1234/debug/big-file | wc … 0 1 500000 相关的nginx配置: location / { proxy_pass http://localhost:1234/; proxy_redirect off; proxy_headers_hash_bucket_size 96; } 和Nginx版本1.7.0 其他一些事实: …
11 nginx  gunicorn 

1
手动旋转日志文件
我有一台运行Nginx的Ubuntu Web服务器。我从未配置过日志文件轮换,而只是发现了一些数千兆字节的单片日志文件。 现在,根据这些提示,我已经配置了日志轮换。但是,我不希望在轮换发生之前等待一个星期(轮换周期)。 有没有办法强制立即旋转特定文件或logrotate配置指定的所有文件?

1
使用中间密钥在Nginx上安装SSL证书时出现问题
我正在尝试在Ubuntu服务器上安装SSL证书。我已经从我的CA购买了证书,并下载了证书本身和中间证书。因此: 我的证书: mydomain.crt 中级证书: GandiStandardSSLCA.pem 我也有(使用openssl制作) 我的私钥(?): mydomain.key 和签名请求: mydomain.csr 我已将所有这些文件上传到服务器,并遵循了将证书与中间件合并的指南: cat mydomain.crt GandiStandardSSLCA.pem > mydomain-bundle.crt 然后,将以下内容添加到我的vhost的配置中: listen 443 ssl; ssl_certificate /etc/nginx/ssl/mydomain-bundle.crt; ssl_certificate_key /etc/nginx/ssl/mydomain.key; 但是当我重新启动nginx时,出现此错误: *重新启动nginx *停止nginx nginx [OK] nginx:[emerg] SSL_CTX_use_PrivateKey_file(“ / etc / nginx / ssl / mydomain.key”)失败(SSL:错误:0B080074:x509证书例程:X509_check_private_key:密钥值不匹配)nginx:配置文件/etc/nginx/nginx.conf测试失败 有什么想法为什么以及如何解决?
11 nginx  ssl 

5
如何停止nginx在上游服务器超时时重试PUT或POST请求?
我们正在使用nginx负载平衡请求到我们的应用程序。我们发现,当请求超时(良好)时,nginx切换到其他上游服务器。但是,它对PUT和POST请求执行此操作,这可能会导致不良结果(数据存储两次)。是否可以将nginx配置为仅在超时时重试GET请求?还是有解决问题的另一种方法? 我们的配置如下: upstream mash { ip_hash; server 127.0.0.1:8081; server 192.168.0.11:8081; } server { ... location / { proxy_pass http://mash/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

3
node.js,mongodb,redis,ubuntu生产性能下降,RAM可用,CPU 100%
正如问题标题所暗示的那样,我很难确定可以对我的应用程序进行哪些改进(或在os,ubuntu中进行了调整)以达到可接受的性能。但首先,我将解释该体系结构: 前端服务器是一台8核机器,具有8 gigs RAM,运行Ubuntu 12.04。该应用程序完全用javascript编写,并在node.js v 0.8.22中运行(由于某些模块似乎抱怨较新版本的节点),我使用nginx 1.4代理来自端口80和443的HTTP流量到受管理的8个节点工作程序并开始使用节点集群api。我使用最新版本的socket.io 0.9.14来处理websocket连接,在该连接上,我仅启用了websockets和xhr-polling作为可用传输。在这台机器上,我还运行了Redis(2.2)的实例。 我将持久数据(例如用户和乐谱)存储在mongodb(3.6)上的第二台服务器上,该服务器具有4gigs RAM和2个内核。 该应用程序已投入生产数月之久(直到一个星期前才在一个盒子上运行),每天约有1.8万用户在使用。除以下一个主要问题外,它始终运行良好:性能下降。使用后,每个进程使用的cpu数量会增加,直到它使worker饱和(不再处理请求)为止。我已经临时解决了它每分钟检查一次每个工作人员使用的cpu的问题,并在达到98%时重新启动它。因此,这里的问题主要是cpu,而不是RAM。自从我更新到socket.io 0.9.14(较早的版本正在泄漏内存)以来,RAM不再是问题,因此我怀疑这是一个内存泄漏问题,尤其是因为现在它是CPU增长相当快的原因(我必须每天重新启动每个工人大约10-12次!)。老实说,正在使用的RAM也在增长,但是非常缓慢,每2-3天使用1个演出,奇怪的是,即使我完全重新启动整个应用程序,它也不会发布。仅当我重新启动服务器后才会释放!我真的不明白... 现在,我发现了nodefly很棒,因此我终于可以看到生产服务器上正在发生的事情,并且从几天开始就在收集数据。如果有人想查看图表,我可以给您访问权限,但是基本上,我可以看到我有80到200个并发连接!我期望node.js处理数千个请求,而不是数百个请求。同样,http流量的平均响应时间在500到1500毫秒之间浮动,我认为这确实很多。同样,在此时有1300位用户在线的时刻,这是“ ss -s”的输出: Total: 5013 (kernel 5533) TCP: 8047 (estab 4788, closed 3097, orphaned 139, synrecv 0, timewait 3097/0), ports 0 Transport Total IP IPv6 * 5533 - - RAW 0 0 0 UDP 0 0 0 …

2
Nginx重写将查询字符串转换为路径
我想要这个简单的重写规则: /somefolder/mypage.aspx?myid=4343&tab=overview 重定向到: /folder/4343/overview/ 我在寻找一些解决方案,但没有一个真正起作用。 我试过了: rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$ /folder/$1/overview permanent; 和 rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$ /folder/$1/overview permanent; 我究竟做错了什么?我要404 (简单的规则就可以了。) 谢谢

2
Nginx + PHP-FPM产生502错误的网关而不是致命错误?
我目前正在使用Nginx和PHP-FPM测试Symfony2。我也使用Xdebug。 Symfony2带有演示包,我想通过在Acme / Demo包中创建语法错误来测试Symfony 2.2.0附带的致命错误的新处理。为什么我这样做,服务器响应是502错误的网关。 但是,如果我在app_dev.php文件中犯了语法错误(因此在触发框架之前),那么Xdebug会告诉我致命错误。 令人惊讶的是,如果我修复了该错字,然后在Acme / Demo捆绑包中重新创建了语法错误,那么Symfony错误处理程序将按预期方式出现。最后,如果修复了所有的错字(页面都可以工作),然后再次重新创建相同的错字(再次出现在Acme / Bundle中),我将得到一个错误的网关。 您对此有任何线索吗?
11 php  nginx  php-fpm  xdebug  symfony 

3
限速时,如何配置nginx返回429 http代码?
在限制/速率限制时,如何配置nginx返回http状态代码429(请求太多),而不是默认的503(服务不可用)? 仅供参考,我将nginx用作HttpLimitReqModule的反向代理。429状态代码的规范草案是RFC6585。 关于stackexchanged的这个(封闭的)问题表明可以使用error_page指令。但是,如果确实存在服务器问题(不是客户对我们的打击太大),并且服务器应该返回503 Service Unavailable ,则我不希望返回429。 有什么建议?

1
Nginx 1.2.2:如何使try_files工作?
我最近将nginx更新到1.2.2版,以下条目似乎已损坏;大概是版本之间的语法变化了吗? location / { # First attempt to serve request as file, then # as directory, then fall back to index.html try_files $uri /index.html; } 当我浏览到http://www.mysite.com/a-non-existent-url时,我被重定向到“ 500 Internal Server Error”错误页面。进行以下日志输入; 2012/08/13 09:20:29 [error] 18457#0: *60 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 10.0.14.1, server: mysite.com, request: …
11 nginx  redirect 

1
位置覆盖中的add_header指令覆盖服务器中的add_header指令
使用nginx 1.2.1,我可以使用add_header以下方式添加多个标头: server { listen 80; server_name localhost; root /var/www; add_header Name1 Value1; <=== HERE add_header Name2 Value2; <=== HERE location / { echo "Nginx localhost site"; } } 结果 GET / HTTP/1.1 200 OK Name1: Value1 Name2: Value2 但是我在add_header内部使用指令后location,下面的其他add_header指令server将被忽略 server { listen 80; server_name localhost; root /var/www; add_header Name1 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.