Alright here is the situtation. I have nginx and with passenger
running. I
can send load to the server and after a certain point I just start
getting
500’s back. I have not been able to see what is causing it. I have
made
tweaks to the config based on some blog posts but I can’t get past a
certain
point. I get to about 1400 requests per minute and than start seeing
500s.
The configs are below. It almost seems like I might be hitting an OS or
server limit that I can’t seem to find. The server is a 8CPU, 8GB
cloud
server.
nginx.conf
user www-data;
worker_processes 8;
worker_rlimit_nofile 30000;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
events {
worker_connections 3500;
use epoll;
}
http {
log_format main
‘$status:$request_time:$upstream_response_time:$pipe:$body_bytes_sent
$connection $
remote_addr $host $remote_user [$time_local] “$request” “$http_referer”
“$http_user_agent” “$http_x_f
orwarded_for” $upstream_addr $upstream_cache_status “in: $http_cookie”’
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_requests 100;
keepalive_timeout 65;
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_vary off;
gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/rss+xm
l application/atom+xml text/javascript application/javascript
application/json text/mathml;
gzip_min_length 1000;
gzip_disable “MSIE [1-6].”;
variables_hash_max_size 1024;
variables_hash_bucket_size 64;
server_names_hash_bucket_size 64;
types_hash_max_size 2048;
types_hash_bucket_size 64;
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
}
site.conf
server {
listen 0.0.0.0:80;
location ~ ^/api/.* {
include /etc/nginx/conf.d/include/restrict.include;
}
redirect http to https
location ~ .* {
return 301 https://$host$request_uri;
}
}
server {
listen 0.0.0.0:443;
server_name somesite.net;
set client body size to 15M, to address file upload limitations
client_max_body_size 15M;
include /etc/nginx/conf.d/actual_config/*.include;
ssl on;
ssl_certificate /etc/nginx/self_signed;
ssl_certificate_key /etc/nginx/cert.key;
Display the maintenance page if it exists
if (-f $document_root/system/maintenance.html){
rewrite ^(.*)$ /system/maintenance.html last;
break;
}
If the file exists as a static file serve it directly without
running all the other rewite tests on it
if (-f $request_filename) {
break;
}
this is the meat of the rails page caching config
it adds .html to the end of the url and then checks
the filesystem for that file. If it exists, then we
rewite the url to have explicit .html on the end
and then send it on its way to the next config rule.
if there is no file on the fs then it sets all the
necessary headers and proxies to our upstream mongrels
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
Use any statically compressed javascript or stylesheet files
location ~* ^/(javascripts|stylesheets)/.*.(js|css) {
#gzip_static on;
}
}
passenger.conf
passenger_root
/opt/ruby/lib/ruby/gems/2.2.0/gems/passenger-enterprise-server-5.0.24;
passenger_ruby /opt/ruby/bin/ruby;
passenger_max_pool_size 31;
passenger_min_instances 31;
passenger_pre_start https://llocalhost;
passenger_log_level 2;
site.conf
location / {
passenger_enabled on;
rails_env lt;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;
passenger_base_uri /;
alias /home/sites/site/current/public/$1;
passenger_app_root /home/sites/site/current;
index index.html index.htm;
}
#Asset displaying.
location ~ ^/(assets)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /home/sites/site/current/public;
}
Posted at Nginx Forum: