Jump to content

Recommended Posts

Posted

Помогите настроить 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 есть какие-то штатные инструменты или нужно колхозить парсинг логов?

Posted

Захожу на 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;
               }
       }

Posted

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 "";
Posted

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

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

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

 

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

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

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

 

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

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

 

stub_status on;

Это модуль http_stub_status_module?

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

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

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

Posted

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

Теперь не могу прикрутить 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.

 

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

Posted

Какая-то вещь в себе, 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"

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.