Jump to content
Калькуляторы

Настройка nginx, виртуальный сервер а также статистика и мониторинг

Помогите настроить nginx.

Структура каталогов следующая:

/sites
/sites/default
/sites/default/www
/sites/default/log
/sites/site1
/sites/site1/www
/sites/site1/log
/sites/site2
/sites/site2/www
/sites/site2/log
/sites/site3
/sites/site3/www
/sites/site3/log

Тут три сайта site1, site2 и site3, а также дефолтный сайт-заглушка default.

Сами сайты лежат в подкаталогах www, в подкаталоге log лежат log-файлы для сайта.

Чтобы определить, куда же я попал, в www/index.html лежит наименование соответствующего подкаталога (в теге TITLE).

У меня такая конфигурация сейчас:

user  nobody;
worker_processes  2;

error_log  /var/log/nginx_errors.log info;
pid  /var/run/nginx.pid;

events {
worker_connections  1024;
}

http {
include  mime.types;
default_type  application/octet-stream;
access_log  /var/log/nginx_access.log  main;
sendfile  on;
keepalive_timeout  65;
gzip  on;
server {
	listen  localhost:80;
	server_name  localhost;
	charset  utf-8;
	root  /sites/default/www;
	location  / {
		index  index.html index.htm;
	}
	error_page  404              /error-404.html;
	error_page  500 502 503 504  /error-50x.html;
	location ~ /error-...\.html$ {
		root   /sites/default/err;
	}
	location  ~ /\.ht {
		deny  all;
	}
}
server {
	listen  80 default_server;
	server_name  default;
	access_log  /sites/default/log/access.log main;
	location  / {
		root   /sites/default/www;
		index  index.html index.htm;
	}
}
server {
	listen  10.1.128.12:80;
	server_name  site1.domain.local;
	access_log  /sites/site1/log/access.log main;
	location  / {
		root   /sites/site1/www;
		index  index.html index.htm;
	}
}
}

 

Захожу на site1.domain.local - попадаю на site1.

Захожу на nosite.domain.local - и снова попадаю на site1, а не на default.

Что я упустил?

 

И еще вопрос, а где получать статистику по загрузке сервера?

В lighttpd есть встроенная выгрузка в rrd, а апаче есть своя статистика.

В nginx есть какие-то штатные инструменты или нужно колхозить парсинг логов?

Share this post


Link to post
Share on other sites

Захожу на site1.domain.local - попадаю на site1.

Захожу на nosite.domain.local - и снова попадаю на site1, а не на default.

Что я упустил?

Из документации

Если у директивы есть параметр default_server, то сервер, в котором описана эта директива, будет сервером по умолчанию для указанной пары адрес:порт. Если же директив с параметром default_server нет, то сервером по умолчанию будет первый сервер, в котором описана пара адрес:порт.

То есть надо прописать все пары IP:порт, как-то так

       server {
               listen  80 default_server;
               listen  10.1.128.12:80 default_server;
               server_name  default;
               access_log  /sites/default/log/access.log main;
               location  / {
                       root   /sites/default/www;
                       index  index.html index.htm;
               }
       }

Share this post


Link to post
Share on other sites

http://nginx.org/ru/...processing.html

 

От якобы дефолтного сервера ничего не наследуется в другие сервера, и все опции нужно писать либо на уровень выше либо дублировать в каждом сервере.

 

Чтобы определить, куда же я попал, в www/index.html лежит наименование соответствующего подкаталога (в теге TITLE).

Это ж бубульгумnginx!

 

location / {

more_set_headers 'Content-Type: text/plain';

add_header Cache-Control 'max-age=30, must-revalidate';

return 200 $http_host;

}

 

more_set_headers - функция из одного из дополнительных модулей, headers_more что ли.

Можно и хтмл генерить попробовать, по типу: return 200 "Ya tut: $http_host";

 

# server stat

location ^~ /status {

stub_status on;

}

 

server_name default;

Неа.

http://nginx.org/ru/...tml#server_name

Умолчание: server_name "";

Share this post


Link to post
Share on other sites

То есть надо прописать все пары IP:порт, как-то так

Да, на этот момент не обратил внимания.

Исправил, но по прежнему попадаю на site1.

 

Это ж бубульгумnginx!

Да не суть, я как-то по старинке, так надежнее.

Однако почему-то попадаю не на тот vhost, что ожидаю.

 

Умолчание: server_name "";

Это тоже не помогло, попадаю на site1.

 

stub_status on;

Это модуль http_stub_status_module?

Я про него прочитал и сделал, такая статистика работает.

Но во-первых, непонятно что он считает, общую статистику по всему серверу или статистику по тому серверу, в контексте которого находится.

А во-вторых, как-то мне ее недостаточно. Я скорее хотел бы видеть время отклика и размер (трафик). Хотя сводка по запросам/подключениям тоже не будет лишней.

Share this post


Link to post
Share on other sites

С виртуальным хостом разобрался, заработало.

Теперь не могу прикрутить Perl никак.

 

nginx.conf

user  www;
worker_processes  2;

error_log  /var/log/nginx_errors.log info;
pid  /var/run/nginx.pid;


events {
 worker_connections  1024;
}


http {
 include  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  main;
 sendfile  on;
 #tcp_nopush  on;
 keepalive_timeout  65;
 gzip  on;
 gzip_min_length  1100;
 gzip_buffers  64 8k;
 gzip_comp_level  3;
 gzip_http_version  1.1;
 gzip_proxied  any;
 gzip_types  text/plain application/xml application/x-javascript text/css;
 server {
   listen  localhost:80;
   server_name  localhost;
   charset  utf-8;
   root  /data/sites/default/www;
   location  / {
     index  index.html index.htm;
     add_header  Cache-Control 'max-age=30, must-revalidate';
   }
   error_page  404  /error-404.html;
   error_page  500 502 503 504  /error-50x.html;
   location  ~ /error-...\.html$ {
     root   /data/sites/default/err;
   }
   location  /nginx_status {
     stub_status  on;
     access_log  off;
     allow  127.0.0.1;
     deny  all;
   }
   location  ~ /\.ht {
     deny  all;
   }
   location  = /favicon.ico {
     log_not_found  off;
     access_log  off;
   }
   location  = /robots.txt {
     allow  all;
     log_not_found  off;
     access_log  off;
   }
 }
 include  vhosts.conf;
}

 

vhosts.conf

server {
 listen  10.1.128.12:80 default_server;
 server_name  "";
 access_log  /data/sites/default/log/access.log main;
 location  / {
   root   /data/sites/default/www;
   index  index.html index.htm;
 }
}

server {
 listen  10.1.128.12:80;
 server_name  selfmon.mydomain.local;
 access_log  /data/sites/selfmon/log/access.log main;
 root   /data/sites/selfmon/www;
 location  / {
   index  index.php index.html index.htm;
 }
 location  ~ \.php$ {
   fastcgi_pass  unix:/var/run/wwwpool.sock;
   fastcgi_index  index.php;
   include  fastcgi_params;
   fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
 location  ~ \.pl$ {
   fastcgi_pass  unix:/var/run/fcgiwrap/fcgiwrap.sock;
   fastcgi_index  index.pl;
   include  fastcgi_params;
   fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
}

 

В php.conf добавлено "cgi.fix_pathinfo = 0".

 

php-fpm.conf

[global]
pid = run/php-fpm.pid

[wwwpool]
user = www
group = www
listen = /var/run/$pool.sock
listen.owner = www
listen.group = www
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

 

/etc/rc.conf

nginx_enable="YES"
php_fpm_enable="YES"
fcgiwrap_enable="YES"
fcgiwrap_user="www"
#fcgiwrap_flags="-c 2 -M 0660"
#fcgiwrap_socket="unix:/var/run/fastcgi.sock"

Если я раскомментирую любую из строк, то fcgiwrap не стартует.

 

В /data/sites/selfmon/www лежат test.php и test.pl, которые выводят "test", разрешения 664.

 

Захожу на http://selfmon.mydomain.local/test.php - вроде бы работает, выдает текст "test".

Захожу на http://selfmon.mydomain.local/test.pl - ошибка, причем ее возвращает nginx.

В /var/log/nginx_errors.log ошибок нет.

В /data/sites/selfmon/log/access.log есть обращения к test.pl.

Если для test.pl назначено разрешение 664, то ошибка 403.

Если для test.pl назначено разрешение 775, то ошибка 502.

 

Не посоветуете, куда смотреть?

Share this post


Link to post
Share on other sites

Какая-то вещь в себе, nginx с FastCGI.

 

test.pl был такой:

print "Test - Perl\n";

 

Если делаю его таким:

#!/usr/bin/perl -w
print "Test - Perl\n";

 

тогда nginx сваливается с ошибкой 502.

В /var/log/nginx_errors.log появляются следующие строки:

[error] 71726#0: *11 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: 10.1.144.3, server: selfmon, request: "GET /test.pl HTTP/1.1", upstream: "fastcgi://unix:/var/run/fcgiwrap/fcgiwrap.sock:", host: "selfmon.mydomain.local"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this