1 (29.11.2010 11:40:05 отредактировано zerg)

Не для кого не откроется секрет, если я напишу о том, что Apache foundation выпускает отличный http-сервер. Один недостаток - прожорлив он уж очень. Это обуславливается самим принципом работы апача. Но и найти ему достойную замену не всегда удаётся. И проблема тут не в ущербности претендентов, а в том, что большинство веб-приложений (например тот же Drupal) изначально ориентированны именно на апач. Главная проблема апача - отдача сгенерированных страниц и статики клиентам. Попробуем это обойти, добавив прокси в виде Nginx.

Для начала ставим apache и php:

# aptitude install apache2 php5 libapache2-mod-rpaf

Далее правим /etc/apache2/apache2.conf с целью уменьшения количества одновременно запущенных процессов apache:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       1
    MaxSpareServers       2
    MaxClients           50
    MaxRequestsPerChild   0
</IfModule>

Как можно заметить, значения для каждой модели работы апача задаются отдельно. В данном случае поправлялись значения для mpm-prefork модели, используемой вместе с php. Соответственно в других случаях надо будет редактировать значения для иных используемых моделей.

В /etc/apache2/ports.conf изменяем следующие строки:

NameVirtualHost *:8080
Listen 8080

Дабы заменить прослушиваемые сервером порты.

Примерный листинг для файла настройки виртуального хоста апача /etc/apache2/sites-enabled/000-default:

<VirtualHost *:8080>
    ServerName somedomain.org
    ServerAlias www.somedomain.org
    ServerAdmin webmaster@somedomain.org
 
    DocumentRoot /var/www
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
 
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
 
    ErrorLog ${APACHE_LOG_DIR}/error.log
 
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
 
    CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost>

Настраиваем модуль апача для работы через прокси, листинг /etc/apache2/mods-enabled/rpaf.conf:

<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 realip [realip1]
</IfModule>

Рестартуем апач:

# /etc/init.d/apache2 restart

Если всё нормально, ставим nginx:

# aptitude install nginx

Листинг /etc/nginx/nginx.conf:

user www-data;
worker_processes  2;
 
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
 
events {
    worker_connections  1024;
    # multi_accept on;
}
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    access_log    /var/log/nginx/access.log;
 
    sendfile        on;
    tcp_nopush      on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
 
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Листинг /etc/nginx/sites-enabled/default:

server {
 
    # Тут порты, которые будет слушать сервак
    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6
 
    # Имена виртуального хоста
    server_name  aliech.ru www.aliech.ru;
 
    # Лог доступа
    access_log  /var/log/nginx/localhost.access.log;
 
    # Описание прокси
    location / {
        proxy_pass        http://127.0.0.1:8080/;
        proxy_redirect        off;
 
        # Отдаём апачу в заголовке начальный адрес для mod_rpaf
        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
 
        client_max_body_size    10m;
        client_body_buffer_size    128k;
 
        proxy_connect_timeout    90;
        proxy_send_timeout    90;
        proxy_read_timeout    90;
 
        proxy_buffer_size    4k;
        proxy_buffers        4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size    64k;
    }
 
    # ну и отдача статики средствами самого Ngnix
    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
        root   /var/www;
    }
}

Собственно это всё, дальше надо только рестартануться:

# /etc/init.d/nginx restart

Собственно на этом всё. Профит.

2

Добавлю, что порт 8080 может индексироваться некоторыми поисковиками, что выглядит не очень презетабильно. Apache можно смело вешать в таком случае на 80 порт 127.0.0.1, а nginx'у прописать строго realip.
Ну, и кол-во процессов в МРМ Apache, как и кол-во процессов nginx вариативно от ресурсов сервера.

Black-metal ist krieg!
Hochlast ist krieg!

3

Denlookh, ну я писал как оно у меня есть... У меня все порты, кроме разрешённых - DROP. Так что я об это не задумывался  smile

4

Учимся выстаивать под ддсом средствами nginx
Итак, нас, а точнее один из саИтов на виртуальном хостинге в очередной раз начали ддосить. Как правило, без специальных ддос железок такой клиент заворачивается на днс на 127.0.0.1, или в случае выделенного ip-адреса- на центральном маршрутизаторе. Но мы решили пойти по другому
У нас есть nginx фронт-эндом, поэтому будем пытаться выстаивать под ддосом с 20000 хостов при помощи него.
Подразумевается, что proxy_cache_path у нас уже описан в контексте http.

Для начала обосомим перменную для которой ужесточим и пропишем правила:

set $special_limit 0;

if ($http_host ~* 'example.com') {
set $personal_limit 1;
}
if ($http_host ~* '[url=http://www.example.com]www.example.com[/url]') {
set $personal_limit 1;
} 

if ($personal_limit = 1) {
rewrite ^(.*)$ /personal_limit last;
}

Далее, описываем локейшн:

location /personal_limit
{
internal;
access_log logs/personal_limit_access.log cachestatus;
error_log logs/personal_limit_error.log notice;

proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_read_timeout 10;
proxy_buffering on;
proxy_ignore_headers "Expires" "Cache-Control";

proxy_pass http://$host$request_uri;
proxy_cache personal_cache;

set $request_uri_without_session $request_uri;
if ($request_uri ~* "(.*)(\?|&)(sid|PHPSESSID|session)=([^&]+)(.*)$") {
set $request_uri_without_session $1$5;
}
proxy_cache_key "$request_method$host$request_uri_without_session";

proxy_cache_valid 200 3d;
proxy_cache_valid 304 1d;
expires 3d;
limit_conn by_vhost 10;
}
Black-metal ist krieg!
Hochlast ist krieg!

5

Если в репах нет новой версии nginx:

wget http://sysoev.ru/nginx/nginx-0.x.xx.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/pr … e-x.tar.gz
tar xvzf nginx-0.x.xx.tar.gz
tar xvzf pcre-x.tar.gz
cd nginx-0.x.xx
./configure --error-log-path=/var/log/nginx/nginx.error_log --user=apache --group=apache --with-poll_module --with-http_realip_module --with-pcre=../pcre-x --with-http_ssl_module --with-http_stub_status_module
make
make install
cd /usr/local/nginx/conf/
mkdir /usr/local/nginx/conf/vhosts/
ln -s /usr/local/nginx/conf /etc/nginx
rm nginx.conf
vim nginx.conf #создаем свой собственный конфиг
/usr/local/nginx/sbin/nginx -t


Пишем скрипт для старта:

vim /etc/init.d/nginx

    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemon
    #
    # chkconfig:   - 85 15
    # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    # config:      /usr/local/nginx/conf/nginx.conf
    # pidfile:     /usr/local/nginx/logs/nginx.pid

    # Source function library.
    . /etc/rc.d/init.d/functions

    # Source networking configuration.
    . /etc/sysconfig/network

    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0

    nginx="/usr/local/nginx/sbin/nginx"
    prog=$(basename $nginx)

    NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

    [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

    lockfile=/var/lock/subsys/nginx

    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        echo -n $"Starting $prog: "
        daemon $nginx -c $NGINX_CONF_FILE
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }

    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }

    restart() {
        configtest || return $?
        stop
        sleep 1
        start
    }

    reload() {
        configtest || return $?
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }

    force_reload() {
        restart
    }

    configtest() {
      $nginx -t -c $NGINX_CONF_FILE
    }

    rh_status() {
        status $prog
    }

    rh_status_q() {
        rh_status >/dev/null 2>&1
    }

    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
            ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
            echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac

    chmod +x /etc/init.d/nginx
    service nginx configtest
    chkconfig nginx on

Black-metal ist krieg!
Hochlast ist krieg!

6

Имеем 2 сервера с разными ip адресами,
На обоих запущен Apache2 в качестве веб сервиса,
Возможно ли средствами nginx объединить 2 веб сервера?

Бежать чтобы жить, родиться чтобы умереть. ˜©

7

iceman, не уверен что правильно понял "объединить". но можете поставить nginx фронтом к обоим апачам
все таки уточните, что именно вы желаете получить в результате объединения, цель какая ?

8 (22.01.2011 04:08:33 отредактировано iceman)

sergey_ пишет:

iceman, не уверен что правильно понял "объединить". но можете поставить nginx фронтом к обоим апачам
все таки уточните, что именно вы желаете получить в результате объединения, цель какая ?

Цель установить как фронтед nginx и собрать оба сервера в кучу. (то есть, чтобы при обращении на nginx он сам как бы проксировал соединения и пользователь не понимал куда его перенаправляют, но при этом на нем должны работать все домены которые раскиданы по обоим серверам в апаче.)(редиректы по разным ip не уместны так как цель создать один общий фронтед в будущем для порядка 10+ серверов.)
Не могу нормально сформулировать свои мысли, поэтому тупо описал, что хочу получить.

Add:
http://i.piccy.info/i5/68/04/990468/plan_500.jpg
Набросал примерную схемку того, что хотелось бы получить.

Бежать чтобы жить, родиться чтобы умереть. ˜©

9

iceman,  ну собственно для каждого домена - директива server с проксированием на соответствующий бакэенд
что-то вроде:

server {
  lesten 80;
  server_name .domain1.com;

  location / {
    proxy_pass http://1.1.1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

server {
  lesten 80;
  server_name .domain2.com;

  location / {
    proxy_pass http://2.2.2.2;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

10

Застой какой-т с Nginx...
-
Прикручиваем .htpasswd к Nginx.
Во первых сам файл надо создать, пару вариантов:
1. Скриптом, забираем, ставим права:

 Консоль:
wget http://trac.edgewall.org/export/10791/t … tpasswd.py
chmod 755 /usr/local/bin/htpasswd.py

Создаем:
 Консоль:
./htpasswd.py -c -b /var/www/www.example.com/.htpasswd user password

2. С помощью утилит апача:
 Консоль:
apt-get install apache2-utils
htpasswd -c /var/www/www.example.com/.htpasswd user

--
Добавляем закрытые locatioin в конфиги виртуальных хостов:

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;

       location /test {
                auth_basic "Restricted  Area";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }

}

Вариант для Drupal:

  location ~* ^/(install|update|memcached|apc|info).php$ {
      auth_basic "Restricted Area";
      auth_basic_user_file /var/www.example.com/.htpasswd;
      # Use your own port of fastcgi here
      fastcgi_pass   unix:/tmp/php-fpm.sock;
      fastcgi_index  index.php;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
 
  location /nginx_status {
      auth_basic "Restricted Area";
      auth_basic_user_file /var/www/www.example.com/.htpasswd;

      stub_status on;
      access_log  off;
      allow 127.0.0.1;
      # Add IP adresses you want to allow
      allow XXX.XXX.XXX.XXX; 
      deny all;
   }
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

11

А можно вот об этом http://linuxforum.ru/viewtopic.php?pid=117166#p117166 немного подробнее?
DDOS' ить сайты начали.

12 (20.11.2011 00:59:33 отредактировано zenon)

В главный конфигурационный файл nginx (обычно /etc/nginx/nginx.conf) стоит еще добавлять следующее:
Мы не хотим чтобы кто-то посещал наш сайт по IP адресу
Значит надо отловить всех кто явно не указал адрес и направить на страницу ошибкой

   server {
      # Использовать default для nginx 0.7.x, default_server для 0.8.x+
      listen 80 default_server;
         server_name _;
      return 500;
   }
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

13

Посмотрел в debian testing, структура каталогов конфигурационных файлов стала похожа на апач:
Дефолт:

/etc/nginx
├── conf.d
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── nginx.conf
├── proxy_params
├── scgi_params
├── sites-available
│   └── default
├── sites-enabled
│   └── default -> /etc/nginx/sites-available/default
├── uwsgi_params
└── win-utf
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

14 (04.09.2012 19:04:03 отредактировано Kostilo)

Имеется Debian 6.0 + nginx ver.0.7.67 из репозитория + локальный сервер обновления карты-справочника 2gis
Вот их конфиги:

/etc/nginx/nginx.conf:

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/default:

server {

        listen   80; ## listen for ipv4
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        server_name  localhost;

        access_log  /var/log/nginx/localhost.access.log;

        location / {
                root   /var/www;
                index  index.html index.htm;
        }

        location /doc {
                root   /usr/share;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }

        location /images {
                root   /usr/share;
                autoindex on;
        }
}

/etc/nginx/conf.d/2gis-local-update-server.conf:

upstream http_backend_2gis {
    server s1.update.2gis.ru:80;
    server s2.update.2gis.ru:80;
    server s3.update.2gis.ru:80;
    server s4.update.2gis.ru:80;
    server s5.update.2gis.ru:80;
    server s6.update.2gis.ru:80;
    server s7.update.2gis.ru:80;
    server s8.update.2gis.ru:80;
    server s9.update.2gis.ru:80;
    server s10.update.2gis.ru:80;
}

upstream https_backend_2gis {
    server s1.update.2gis.ru:443;
    server s2.update.2gis.ru:443;
    server s3.update.2gis.ru:443;
    server s4.update.2gis.ru:443;
    server s5.update.2gis.ru:443;
    server s6.update.2gis.ru:443;
    server s7.update.2gis.ru:443;
    server s8.update.2gis.ru:443;
    server s9.update.2gis.ru:443;
    server s10.update.2gis.ru:443;
}

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

proxy_temp_path /var/cache/2gis/nginx/temp 1 2;

proxy_cache_path /var/cache/2gis/nginx/infolist levels=1:2 keys_zone=one_2gis:10m inactive=20d max_size=256M;

limit_zone activity_threshold $threshold 10m;

server {
    listen *:80 default;
    server_name 2gis-update;
    default_type  application/octet-stream;
    include '2gis-local-update-server-partial.conf';

    location = /ver3/stat
    {
        client_max_body_size 2G;

        if ($request_method != POST) {
            return 405;
        }

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://http_backend_2gis/ver3/stat;
    }
}
server {
    listen *:443;
    server_name 2gis-update;
    default_type  application/octet-stream;

    ssl on;
    ssl_certificate 2gis-local-update-server.crt;
    ssl_certificate_key 2gis-local-update-server.key;

    include '2gis-local-update-server-partial.conf';
}

/etc/nginx/2gis-local-update-server-partial.conf:

set $threshold "1";
limit_conn activity_threshold 1024;
proxy_cache_valid any 10m;
proxy_cache_key $uri$is_args$args;

location /ver3/ {
    proxy_pass https://https_backend_2gis;

    proxy_buffering on;
    proxy_cache one_2gis;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
}

location = /ver3/ping {
    limit_conn activity_threshold 960;
    default_type text/plain;
    expires -1;
    add_header Last-Modified $sent_http_Expires;
    alias /var/cache/2gis/nginx/updates/ping;
}

location /ver3/download/ {
    if ($request_method !~ GET|HEAD) {
        return 405;
    }

    open_file_cache max=1000;
    expires 1M;

    root /var/cache/2gis/nginx/updates;

    try_files $uri @download_it;
}

location @download_it
{
    open_file_cache max=1000;
    expires 1M;

    root /var/cache/2gis/nginx/updates;

    proxy_store  on;
    proxy_set_header If-None-Match "";
    proxy_set_header If-Modified-Since "";
    proxy_pass https://https_backend_2gis;
}

При любой попытке обратиться к серверу, хоть из центра обновлений 2gis, хоть из браузера на дефолтную страничку имею такой результат:
В браузере страница 404
в файле /var/log/nginx/error.log:

2012/09/01 23:32:20 [error] 1549#0: *7 "/usr/local/nginx/html/index.html" is not found (2: No such file or directory), $
2012/09/02 23:43:51 [error] 1157#0: *1 "/usr/local/nginx/html/index.html" is not found (2: No such file or directory), $
2012/09/03 01:59:03 [error] 1157#0: *2 open() "/usr/local/nginx/html/manager/html" failed (2: No such file or directory$

Дефолтная страничка у меня лежит тут:/var/www/index.html
сервер обновления карты-справочника 2gis: /var/cache/2gis/nginx/{infolist,temp,updates}
ВОПРОС: откуда он берёт эту дорогу - usr/local/nginx/html/ ?! !Реально её нет и не было.
И как его направить на путь истинный? Подскажите пожалуйста, хотя бы куда копать.
PS:Имею дело с nginx первый раз. Исследования сайта nginx.org результата не дало

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

15

Kostilo кроме как из location брать особо неоткуда, а это точно все конфиги?
Я бы убрал из include * , и указл только нужные, чтобы не включал все найденные файлы в каталоге, а подключал только конкретно те, которые указал.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

16

newzenon пишет:

Kostilo кроме как из location брать особо неоткуда, а это точно все конфиги?
Я бы убрал из include * , и указл только нужные, чтобы не включал все найденные файлы в каталоге, а подключал только конкретно те, которые указал.

Конфиги 2gis - точно все. проверял по их инструкции: http://help.2gis.ru/pc/update/server/server_unix/
Сначала поставил из деб пакета потом переустановил вручную - результат не изменился.

2012/09/05 06:29:32 [error] 1224#0: *3 "/usr/local/nginx/html/index.html" is not found (2: No such file or directory), $
2012/09/05 06:29:32 [error] 1224#0: *3 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory)$
2012/09/05 06:29:50 [error] 1224#0: *4 open() "/usr/local/nginx/html/2gis-update" failed (2: No such file or directory)$
2012/09/05 06:30:39 [error] 1224#0: *4 open() "/usr/local/nginx/html/2gis-update/update" failed (2: No such file or dir$

T.е./usr/local/nginx/html может взятся только из настроек nginx
Законное место для настроек - /etc/nginx. все конфиги оттуда я выложил. usr/local/nginx/html/-такой путь на моём сервере отсутствует физически и при установки nginx он не появлялся.
О существовании этого пути я читал на сайте автора.Это дефолтный путь nginx начиная с версии 1.0(если я правильно прочитал)
откуда он всплывает у меня? Где ещё могут быть конфиги относящиеся к теме?

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

17

А, вот еще, в /etc/nginx/conf.d/2gis-local-update-server.conf вижу две дерективы сервера, но куда они ведут не понял, root - путь не указан.
Для сервера важно имя, путь,  порт если не отличен от 80-го можно не указывать:

server {
        server_name  localhost;
        location / {
                root   /var/www;
                index  index.html;
        }
}

подумаю еще, конфиги с deb пакетом были или сам правил?

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

18

Kostilo пишет:

При любой попытке обратиться к серверу, хоть из центра обновлений 2gis, хоть из браузера на дефолтную страничку имею такой результат:

А собственно как обращался? По ip?
Чтобы направить nginx при обращении к ip на котором он стоит есть такое, дописывается _до_ всех include в /etc/nginx/nginx.conf

   server {
      # use default instead for nginx 0.7.x, default_server for 0.8.x+
      listen 80 default_server;

      # if no listen is specified, all IPv4 interfaces on port 80 are
      # listened to listen on both IPv4 and IPv6 as well, listen [::]
      # and 0.0.0.0 must be specified.
      server_name _;
      return 404;
   }

Этот пример для www но он наглядно показывает как откинуть на 404 всех кто обратился к сервору по ip адресу, обработать, соответственно можно по-другому.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

19

newzenon пишет:

конфиги с deb пакетом были или сам правил?

Конфиги из деб-пакета. Пробовал править по учебнику http://nginx.org/ru/docs/
но резултата не получил, всё равно он лезет в каталог /usr/local/nginx/html/

2012/09/05 11:58:56 [error] 9734#0: *28 directory index of "/usr/local/nginx/html/" is forbidden, client: 192.168.0.34, s$
2012/09/05 11:59:01 [error] 9734#0: *28 open() "/usr/local/nginx/html/2gis-update" failed (2: No such file or directory$
2012/09/05 11:59:04 [error] 9734#0: *28 open() "/usr/local/nginx/html/2gis-update/update" failed (2: No such file or di$
2012/09/05 12:00:20 [error] 9734#0: *29 open() "/usr/local/nginx/html/2gis-update" failed (2: No such file or directory$
2012/09/05 12:00:51 [error] 9734#0: *29 open() "/usr/local/nginx/html/2gis-update" failed (2: No such file or directory$
2012/09/05 12:00:55 [error] 9734#0: *29 open() "/usr/local/nginx/html/2gis-update/update" failed (2: No such file or di$
2012/09/05 12:00:59 [error] 9734#0: *29 open() "/usr/local/nginx/html/2gis-update/update" failed (2: No such file or di$
newzenon пишет:

А собственно как обращался? По ip?

Обращаться пытался по разному:
http://192.168.0.1
http://192.168.0.1/2gis-update/
http://192.168.0.1/2gis-update/update
http://192.168.0.1/var/cache/2gis/nginx/update(сдесь рабочая папка сервера)
http://2gis-update/
http://2gis-update/update
результат один и тот же /usr/local/nginx/html/ + содержимое адресной строки

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

20 (05.09.2012 09:24:07 отредактировано Kostilo)

ошибочный адрес так как имя каталога .../updates
исправил во всех попытках обращения к серву - результат тот же(((

Провёл эксперимент - начал лепить произвольные имена домена - результат тот же(((

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

21

Если конфиги от разработчиков, то пожалуй можно попробовать nginx посвежее, больно уж древний он у тебя.
Подключи Dotdeb репозиторий и обновись.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

22

разработчики рекомендуют nginx  версии не ниже 0.7.65.
У меня nginx version: nginx/0.7.67
А вот насчёт версии OS у них ни чего не сказано - пошёл обновляться

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

23

Там же есть установка вручную, вот имхо лучше как там и написано http://help.2gis.ru/pc/update/server/se … ix/#custom
Только сначала конфиги почисть.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

24

newzenon пишет:

Там же есть установка вручную, вот имхо лучше как там и написано http://help.2gis.ru/pc/update/server/se … ix/#custom

Так и делал получается то же самое что и при установке из deb-пакета.Абсолютно идентично. И конфиги /etc/nginx/ перед новой инсталяцией выношу руками после удаления apt-get-ом(Если из deb ставил)
PS: текучка задавила, завтра с утра продолжу

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

25

Kostilo пишет:

Так и делал

Пробежал бегло по конфигурации которая там, отличия от твоей уже видны.
Сначала те файлы которые правил сохрани где-нибудь, потом снеси все

# apt-get purge 2gis-local-update-server
# apt-get purge nginx 

И удали каталог /etc/nginx
Заново установи:

# apt-get install nginx
# apt-get install 2gis-local-update-server

После правок конфигов, рестарт nginx:

# /etc/init.d/nginx restart
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

26

Начал всё с начала:

Установил Debian 6.0
Связь с внешним миром через usb-модем настроил с помощью network-manager
потому что по другому не умею, а Гном всё равно пока нужен.

Внутреннюю сетку настраиваю руками в /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
    iface eth0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    broadcast 192.168.0.255

создаю файл ipt.sh

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE

делаю его исполняемым
chmod +x /etc/firewall.sh

запускаю
root@deb6:~# sh ipt.sh

С клиентской машины пингую
ping -t 192.168.0.1 OK!
ping -t ya.ru OK!

Считаю сеть настроеной
Теперь очередь NGINX
Захожу сюда:
http://www.dotdeb.org/instructions/ и делаю всё строго по инструкции:

Add these two lines to your /etc/apt/sources.list file
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

root@deb6:~# wget http://www.dotdeb.org/dotdeb.gpg
root@deb6:~# cat dotdeb.gpg | apt-key add -
root@deb6:~# apt-get update
root@deb6:~# apt-get install nginx
root@deb6:~# /etc/init.d/nginx restart
Restarting nginx: nginx.
root@deb6:~# 

Запускаю на сервере браузер:
http://127.0.0.1/ - Welcome to nginx!
http://localhost/ - Welcome to nginx!
Всё работает!
Запускаю браузер на клиенте:
http://192.168.0.1/ - Welcome to nginx!
И здесь всё работает!

Теперь устанавливаем сервер обновлений 2gis

Добавляю в /etc/apt/sources.list следующую строчку:

deb http://deb.2gis.ru/ 2gis main

Импортирую ключ:

root@deb6:~# gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 69ECCC891636CC92
root@deb6:~#  gpg --armor --export 69ECCC891636CC92 | apt-key add -
OK
root@deb6:~# apt-get update
root@deb6:~# apt-get install 2gis-local-update-server
root@deb6:~# /etc/init.d/nginx restart

В процессе установки в числе прочих появляется такая фраза:

Настраивается пакет 2gis-local-update-server (1.0-2) ...
2gis-local-update-server package: Only default nginx config detected -- Working as virtualhost and default site
Reloading nginx configuration: nginx.

Из чего я делаю вывод что всё уже настроено полностью.Но на всякий случай
рестартую nginx в ручную:

root@deb6:~# /etc/init.d/nginx restart
Restarting nginx: nginx: [warn] the "limit_zone" directive is deprecated, 
use the "limit_conn_zone" directive instead in /etc/nginx/conf.d/2gis-local-update-server.conf:33
nginx.
root@deb6:~# 

И что делать с этой устаревшей директивой? Если править то как? Или можно не трогать?

После всех манипуляций запускаю на сервере браузер:

http://127.0.0.1/ - 404 Not Found
http://localhost/ - 500 Internal Server Error

Запускаю браузер на клиенте:

http://192.168.0.1/ - 404 Not Found

И здесь всё умерло!
При обращении к серверу из центра обновлений 2gis(с клиента)

http://192.168.0.1/ - "ошибка подключения к серверу"
http://192.168.0.1/2gis-update - "ошибка подключения к серверу"
http://2gis-update/ - "ошибка подключения к серверу"

nano /etc/hosts

127.0.0.1       localhost ##2gis-update
127.0.1.1       deb6
10.64.6.12      2gis-update
# The following lines are desirable for IPv6 capable hosts
#::1     ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters

nano /var/log/nginx/access.log

192.168.0.34 - - [06/Sep/2012:15:00:56 +0700] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/2012$
192.168.0.34 - - [06/Sep/2012:15:28:18 +0700] "GET / HTTP/1.1" 404 142 "-" "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20$
192.168.0.34 - - [06/Sep/2012:15:57:52 +0700] "GET /2gis-update/ping HTTP/1.1" 404 168 "-" "-"
127.0.0.1 - - [06/Sep/2012:16:05:18 +0700] "GET / HTTP/1.1" 404 142 "-" "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.10.2$
127.0.0.1 - - [06/Sep/2012:16:05:19 +0700] "GET /favicon.ico HTTP/1.1" 404 142 "http://127.0.0.1/" "Opera/9.80 (X11; Linux$
127.0.0.1 - - [06/Sep/2012:16:05:26 +0700] "GET / HTTP/1.1" 500 192 "-" "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.10.2$
127.0.0.1 - - [06/Sep/2012:16:05:27 +0700] "GET /favicon.ico HTTP/1.1" 500 192 "http://localhost/" "Opera/9.80 (X11; Linux$
127.0.0.1 - - [06/Sep/2012:16:05:38 +0700] "GET / HTTP/1.1" 500 192 "-" "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.10.2$
127.0.0.1 - - [06/Sep/2012:16:05:38 +0700] "GET /favicon.ico HTTP/1.1" 500 192 "http://localhost/" "Opera/9.80 (X11; Linux$
127.0.0.1 - - [06/Sep/2012:16:06:39 +0700] "GET / HTTP/1.1" 500 192 "-" "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.10.2$
127.0.0.1 - - [06/Sep/2012:16:06:39 +0700] "GET /favicon.ico HTTP/1.1" 500 192 "http://localhost/" "Opera/9.80 (X11; Linux$
192.168.0.34 - - [06/Sep/2012:16:07:59 +0700] "GET / HTTP/1.1" 404 142 "-" "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20$

nano /var/log/nginx/access.log

2012/09/06 15:28:18 [error] 2230#0: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 1$
2012/09/06 15:57:52 [error] 2333#0: *6 open() "/etc/nginx/html/2gis-update/ping" failed (2: No such file or directory), cl$
2012/09/06 16:05:18 [error] 2382#0: *1 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 1$
2012/09/06 16:05:19 [error] 2382#0: *2 open() "/etc/nginx/html/favicon.ico" failed (2: No such file or directory), client:$
2012/09/06 16:06:39 [error] 2382#0: *8 rewrite or internal redirection cycle while internally redirecting to "/index.html"$
2012/09/06 16:07:59 [error] 2382#0: *9 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 1$

Куда копать? be Может ли  это быть из-за директивы limit_zone?Ведь не пишет же что ошибка, только предупреждает...
И откуда взялся этот мифический путь -/etc/nginx/html/index.htm?
Нет его.Физически.

Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает.

27

Я же говорил, ручками настраивай все конфиги.
Конфиги все выложи еще раз.
Если освобожусь попробую поставить.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

28

Так, стоп 2gis ставит один конфиг, /etc/nginx/conf.d/2gis-local-update-server.conf
Но в нем только одна локация:

    location = /ver3/stat
    {
        client_max_body_size 2G;

        if ($request_method != POST) {
            return 405;
        }

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://http_backend_2gis/ver3/stat;
    }
}

Которая будет доступна по адресу

localhost/ver3/stat

или

2gis-update/ver3/stat

Так как у нас root не прописан, естественно nginx не знает где ему что искать если обращаемся по ip-адресу или альясу 2gis-update.
Для того чтобы он шел за html'ом надо location добавить, примерно:

       location / {
                root   /var/www;
                index  index.html index.htm;
        }

в файл /etc/nginx/conf.d/2gis-local-update-server.conf

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

29

ы. И просмотри все include, я например не сразу заметил что в /etc/nginx/conf.d/2gis-local-update-server.conf есть

include '2gis-local-update-server-partial.conf';

Которая добавляет кусок из файла /etc/nginx/2gis-local-update-server-partial.conf
К примеру у меня

http://192.168.2.12/ver3/ping

pong ответил нормально. (ip - виртуалка для опытов)

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

30

Про то что ругается на limit_zone, так как обновился на более новый nginx раньше запись такая была:

limit_zone limit_conn_zone activity_threshold $threshold 10m;

теперь:

limit_conn_zone $threshold zone=activity_threshold:10m;

То есть старая запись все-равно работает, но предупреждает о будущей несовместимости, -
раньше:

limit_zone name $variable size;

сейчас:   

limit_conn_zone $variable zone=name:size; 

как и с default_server, до 0.7 правильной была запись

listen *:80 default;

сейчас

listen 80 default_server;
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.