nginx segfault
tr1gger
tr1gger at yandex.ru
Sat Mar 31 01:24:53 MSD 2007
Ясно, спасибо!
>On Sat, Mar 31, 2007 at 12:41:32AM +0400, tr1gger wrote:
>
>> Здравствуйте! Система linux gentoo, проц amd opteron, nginx из портежей 0.5.5 (то же самое происходит с 0.5.15, только собранного ручками)
>> После запроса http://site.ru/nonexistent.(css|js|...) рабочий процесс падает с segfault, после этого запускается рабочий процесс с новым pid. В логах нгинкса ничего, в сислоге только nginx[pid]: segfault at ... error 6
>>
>> # nginx.conf
>>
>> user nginx nginx;
>>
>> worker_processes 1;
>>
>> error_log /var/log/nginx/error.log info;
>>
>> events
>> {
>> worker_connections 1024;
>>
>> use epoll;
>> }
>>
>> http
>> {
>> client_header_buffer_size 1k;
>> client_header_timeout 3m;
>> client_body_timeout 3m;
>> default_type application/octet-stream;
>> gzip on;
>> gzip_comp_level 5;
>> gzip_min_length 1100;
>> gzip_buffers 4 8k;
>> gzip_types text/plain application/x-javascript text/css;
>> gzip_proxied off;
>> ignore_invalid_headers on;
>> keepalive_timeout 0;
>> large_client_header_buffers 4 4k;
>> log_format main '$remote_addr $request $status';
>> output_buffers 1 32k;
>> postpone_output 1460;
>> sendfile on;
>> # send_lowat 12000;
>> send_timeout 3m;
>> tcp_nopush on;
>> tcp_nodelay on;
>>
>> include /etc/nginx/mime.types;
>> include /etc/nginx/vhosts/*.conf;
>> }
>>
>> # site.ru
>>
>> server
>> {
>> listen 192.168.0.1:80 default backlog=1024 rcvbuf=32768 sndbuf=32768;
>> server_name site.ru www.site.ru;
>>
>> root /var/lib/vhosts/site.ru/wwwroot;
>>
>> access_log /var/log/nginx/vhosts/site.ru/access.log main;
>> error_log /var/log/nginx/vhosts/site.ru/error.log info;
>>
>> error_page 403 /403.html;
>> error_page 404 /404.html;
>> error_page 500 502 503 504 /50x.html;
>>
>> location = /403.html { root /var/lib/vhosts/site.ru/errors; }
>> location = /404.html { root /var/lib/vhosts/site.ru/errors; }
>> location = /50x.html { root /var/lib/vhosts/site.ru/errors; }
>>
>> location /nginx-status
>> {
>> stub_status on;
>> access_log off;
>> allow 127.0.0.1;
>> deny all;
>> }
>>
>> location /
>> {
>> charset off;
>> expires off;
>>
>> client_max_body_size 64k;
>> client_body_buffer_size 64k;
>> client_body_temp_path /var/tmp/nginx/client/site.ru;
>>
>> proxy_pass http://127.0.0.1:80/;
>> proxy_redirect off;
>>
>> proxy_set_header Host $host;
>> proxy_set_header X-Client-IP $remote_addr;
>> proxy_set_header X-Forwarded-For $remote_addr;
>> proxy_set_header X-Real-IP $remote_addr;
>>
>> proxy_connect_timeout 90;
>> proxy_send_timeout 90;
>> proxy_read_timeout 90;
>> # proxy_send_lowat 12000;
>>
>> proxy_buffer_size 4k;
>> proxy_buffers 4 32k;
>> proxy_busy_buffers_size 64k;
>> proxy_temp_file_write_size 64k;
>> proxy_temp_path /var/tmp/nginx/proxy/site.ru;
>> }
>>
>> location ~* ^.+\.(css|js|gif|ico|jpg|jpeg|png)$
>> {
>> root $document_root;
>> ^^^^^^^^^^^^^^^ если написать "/var/lib/vhosts/site.ru/wwwroot;",
>> то все описанной выше проблемы не наблюдается.
>> access_log off;
>> expires 30d;
>> }
>> }
>
>Если в location нужно использовать тот же корень, что и для сервера,
>то ничего указывать не нужно - он наследуется.
>
>А segfault происходит из-за рекурсивного вызова: для определения
>root вызывается переменная $document_root, которая опять вызывает
>переменную $document_root и так далее. Нужно будет запретить её
>использование в таком контексте.
>
More information about the nginx-ru
mailing list