Articles of nginx

为什么服务器写入远远超过读取磁盘

我正在运行一个Ruby on Rails应用程序,我使用Passenger Nginx,Ruby on Rails 3.2,searchgem Sunspot(使用Solr作为search引擎)。 我的应用程序可以与大约6K的活跃用户一起工作,但是当像15K活跃用户那样的stream量飙升时,它的速度是不可接受的。 我检查了newrelic日志,看到I / O使用情况,但我不明白。 你可以看到“写”远远超过“读”。 我不明白这是因为大多数用户正在使用GET请求,这与阅读行动有关,我猜。

PHP文件下载(源代码),而不是运行Nginx和PHP5-FPM

浏览到网站上的页面时,正在下载页面而不是运行Nginx Config – user www-data www-data; worker_processes 4; events { worker_connections 2048; } http { include mime.types; default_type application/octet-stream; access_log off; sendfile on; tcp_nopush on; tcp_nodelay off; keepalive_timeout 10; gzip on; gzip_comp_level 2; gzip_proxied any; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; server { listen 80; server_name localhost; location / { root /home/bil/public_html/webiste.net/public/; index […]

NginX导致PHP文件被执行两次

我处于一个困难的地方,试图弄明白为什么会这样。 出于某种原因,当我打开我的网站的index.php文件正在执行。 我已经能够通过添加file_put_contents('runs.txt', 'executed'.PHP_EOL, FILE_APPEND);将其缩小到NginX / PHP-FPM file_put_contents('runs.txt', 'executed'.PHP_EOL, FILE_APPEND); 到index.php的顶部,并使用网站和命令行执行它。 如果我从命令行执行它,它只输出一个executed ,而如果我从网站(通过NginX) executed它输出两个executed 。 该脚本也没有redirect到自身,因为它只是返回200响应代码。 除了通过执行脚本两次使用更多的内存之外,还通过使CSRF再次生成来消除CSRF保护,因此CSRF是无用的。 下面是我的nginxconfiguration文件: nginx.conf user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/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] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log […]

无法连接到DigitalOcean的MySQL服务器

我刚刚完成使用nginx设置我的数字海洋服务器(Ubuntu 12.10 x64),但我想要一个单独的MySQL服务器来减less负载到Web服务器。 问题是,我无法连接到我的服务器。 我已经尝试设置iptables打开端口3306,我已经评论了线绑定地址服务器在本地正常工作,用wordpress,nginx和phpmyadmintesting。 我无法从任何地方连接,不断得到错误1130(HY000):主机'192.XXX.XXX.XXX'不允许连接到这个MySQL服务器。 是的,我重新加载了所有的服务

NGINX:静态提供/ images /文件夹

为了做到这一点,我已经尝试了很多东西,通过在/images/test.php中放置一个php文件来testing它是否会被下载或执行,并且它总是被执行。 此外,我有很多SEO重写,所以我不知道发生了什么事情。 这是我目前正在尝试(我已经红了很多关于它的文档): 服务器configuration: user nginx nginx; worker_processes 1; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { #proxy_cache off; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr – $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; […]

nginx和SNI:是否可以通过域名自动parsingSSL证书

我需要设置一个服务器,使用不同的域名通过SSL服务器上的相同内容。 问题是我需要能够尽可能轻松地添加新的域名。 假设所有的域名已经configuration到我的服务器,我猜是否有可能以某种方式设置nginx(或者可能是另一个反向代理),以便它将监听所有请求到特定的IP,并在获得HTTPS请求后尝试查找用于在某个文件夹或数据库中创build此请求的域的证书,并在发现证书(因此我们可以build立安全连接)时提供请求,或者如果找不到证书,则拒绝连接。 我不确定这是可能的,也许我正在考虑一些鲁莽的事情,但是因为我没有在网上find任何信息,所以我决定在这里问。 据我所知,最简单的解决scheme将是为每个应支持的域添加一个单独的configuration。

长时间轮询的php5-fpm优化

我正在用PHPdevise一个聊天应用程序。 我使用php-fpm环境下的nginx。 问题是,多个客户端连接后,PHP脚本变得非常慢。 我只有几个(5-10)客户端连接,长轮询被设置为30秒。 Nginx可以立即提供图片或样式等静态内容,但对于PHP脚本来说,加载需要将近5秒的时间。 我使用XDebug来剖析代码,但它告诉我,加载了5秒的脚本只花了100ms,这是令人困惑的。 我认为php5-fpm队列传入的请求,这导致这样的延迟。 有什么我应该知道关于php5-fpmconfiguration使用长轮询时? 我想强调的是,当有5个客户正在使用聊天时,会变得非常慢。 类似的问题: http : //forum.nginx.org/read.php?3,198958 ( 一个长时间运行的PHP脚本阻止所有其他的PHP请求 ) 这也可能是连接: http : //www.matt-knight.co.uk/2011/concurrent-php-sessions/

Nginx的。 使用正则expression式redirect

我是nginx的新手。 我有Apache之前的nginx,我有问题。 我似乎需要在configuration2规则: 规则1)如果我们有url“/ my_path”我们不碰它,但用户去“/ my_path.php” 规则2)如果我们有url“/my_path.php”,我们将它改为“/ my_path”,用户转到“/my_path.php”,因为我们回到规则1。 我认为这是必要的search引擎优化? 我的configuration,例如是… server { listen 8080; server_name my_apache_server; location / { proxy_pass http://my_apache_server/; } location ~^\/(.+)$ { rewrite ^\/(.+)$ /$1.php break; proxy_pass http://my_apache_server/; } location ~^\/(.+)\.php$ { proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php; } … } 但是nginx显示一个错误: nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, […]

nginx ssl virt主机问题 – 网站将无法加载

我为端口80和443configuration了nginx,443包含了一个ssl证书configuration。 当我重新启动nginx时,没有错误发生,所以我不相信这是一个证书问题,但我当然可能是错的。 但是,当我加载 https://picantewsdev.hotsalsainteractive.com/logo/game/1f126552-9ac4-4db2-b7ce-cede6f38f7ea/ef0c3db2-7cf8-4dc3-bada-625c77cdff80 我得到“页面无法显示…”的浏览器消息。 而且,我甚至没有看到请求打到服务器。 但如果我加载 http://picantewsdev.hotsalsainteractive.com/logo/game/1f126552-9ac4-4db2-b7ce-cede6f38f7ea/ef0c3db2-7cf8-4dc3-bada-625c77cdff80 该请求使其到服务器(尽pipe500错误,但现在很好)。 有任何想法吗? 我们不在负载平衡器后面。 这是一个托pipe在Rackspace上的服务器。 没有硬件防火墙或类似的东西。 这里是nginxconfiguration: server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html/public; index index.php index.html index.htm; server_name picantewsdev.hotsalsainteractive.com; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; # add the following […]

使用nginx作为caching代理,不需要客户端的条件获取

我想Nginx被设置为一个反向代理caching在另一个Web服务器(原始服务器)之前。 我知道如何做到这一点。 但是,如果我不想依靠Web浏览器发送HTTP条件获取来利用caching呢? 相反,我想Nginx做一个HTTP条件获取到原始服务器。 如果Nginx具有陈旧的内容,它将使用来自原始服务器的新副本更新其caching。 stream程将如下所示: 浏览器(或其他非浏览器客户端)向Nginx发送HTTP GET请求。 (没有条件获取标题)。 Nginx发送请求的内容到源服务器的HTTP GET,包括一个条件获取头(例如“If-Modified-Since”)。 如果内容已被修改,原始服务器将响应HTTP 200以及Nginx用来更新其caching的内容。 否则,它会响应HTTP 304“未修改”,Nginx不更新其caching。 Nginx响应HTTP 200和请求的内容给浏览器。 原理是减less来自浏览器的不使用条件获取的HTTP请求的源服务器上的负载。