Настройка nginx и PHP/FastCGI в Windows

Как настроить связку nginx+PHP в Windows и не иметь головной боли.

Принято считать, что замечательный Web-сервер nginx работает только под Unix-подобными операционными системами. Верно, но лишь отчасти. nginx превосходно собирается и в Cygwin. Возникает вопрос: а зачем это надо, собирать nginx под Windows? Ответ: я знаю достаточно много web-разработчиков, работающих в силу тех или иных причин под Windows. И в работе встречаются ситуации, когда на рабочей [...]

← Вернуться к полной версии записи «Настройка nginx и PHP/FastCGI в Windows»…

Автор: ; опубликовано в: nginx, Windows, Администрирование; метки: Cygwin, FastCGI, nginx, PHP, Windows
28
Мар
2008

RSS Комментарии к статье «Настройка nginx и PHP/FastCGI в Windows» (44)  »

  1. Valodik, а можно на конфиги краем глаза взглянуть?

    PS – с очень большой вероятностью у Вас не запущен PHP/CGI, либо же он слушает другой порт. Посмотрите выдачу netstat -an

  2. Valodik

    Вы правы не слушает на порт 127.0.0.1:9000
    Вот результаты netstat -an

    Active Connections
      Proto  Local Address          Foreign Address        State
      TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
      TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
      TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
      TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
      TCP    127.0.0.1:80           127.0.0.1:1037         ESTABLISHED
      TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING
      TCP    127.0.0.1:1033         127.0.0.1:1034         ESTABLISHED
      TCP    127.0.0.1:1034         127.0.0.1:1033         ESTABLISHED
      TCP    127.0.0.1:1037         127.0.0.1:80           ESTABLISHED
      UDP    0.0.0.0:445            *:*
      UDP    0.0.0.0:500            *:*
      UDP    0.0.0.0:4500           *:*
      UDP    127.0.0.1:123          *:*
      UDP    127.0.0.1:1035         *:*
      UDP    127.0.0.1:1036         *:*
      UDP    127.0.0.1:1900         *:*
    

    А это из nginx.conf

    location ~ \.php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME   $fastcgi_script_name;
                include        fastcgi_params;
            }
    
  3. А сам-то php-cgi Вы запустили?

    Выполните эти две команды из консоли (cmd.exe):

    set PHP_FCGI_MAX_REQUESTS=0
    php-cgi -b 127.0.0.1:9000 -c C:\php\php.ini
    

    Вместо C:\php\php.ini должен быть путь к Вашему php.ini.

  4. Valodik

    Мой php-интерпретатор никак не хочет принимать параметр -b.
    Вот инфо про используемых интерпретаторов

    PHP 4.4.2 (cgi-fcgi) (built: Jan 13 2006 13:53:43)
    Copyright (c) 1997-2006 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

    PHP 5.0.4 (cgi-fcgi) (built: Mar 31 2005 02:45:43)
    Copyright (c) 1997-2004 The PHP Group
    Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies

  5. Valodik, запустите Ваш php-cgi с параметром --help.

    В моём случае получилось нечто подобное:

    Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
           php <file> [args...]
      -a               Run interactively
      -b <address:port>|<port> Bind Path for external FASTCGI Server mode
      -C               Do not chdir to the script's directory
      -c <path>|<file> Look for php.ini file in this directory
      -n               No php.ini file will be used
      -d foo[=bar]     Define INI entry foo with value 'bar'
      -e               Generate extended information for debugger/profiler
      -f <file>        Parse <file>.  Implies `-q'
      -h               This help
      -i               PHP information
      -l               Syntax check only (lint)
      -m               Show compiled in modules
      -q               Quiet-mode.  Suppress HTTP Header output.
      -s               Display colour syntax highlighted source.
      -v               Version number
      -w               Display source with stripped comments and whitespace.
      -z <file>        Load Zend extension <file>.
    

    Если в выдаче у Вас не будет параметра -b, это означает, что Ваш PHP собран без поддержки FastCGI.

    PS – Вам в любом случае было бы неплохо обновить PHP.

  6. Valodik

    Обновил php.
    А теперь такая проблема.При обращение к php-файлам nginx выдает

    No input file specified.

    Как решить эту проблему?

  7. У Вас проблема с fastcgi_param SCRIPT_FILENAME.

    Допустим, что Ваш сайт живет в C:\mysites\mysites.com (то есть это DOCUMENT_ROOT).

    В этом случае SCRIPT_FILENAME должен быть таким:

    fastcgi_param SCRIPT_FILENAME c:/mysites/mysites.com$fastcgi_script_name;

  8. Valodik

    Спаибо вам.
    Теперь все работает.
    Проблема была в том,что fastcgi_param не понимает не относительный путь, не путь вида /cygdrive/c/nginx…

  9. Василий

    Добрый день уважаемый автор.
    Я хочу обратиться к вам за помощью.
    Перестал запускаться nginx, выдавая:
    2008/08/20 17:23:30 [notice] 1072#0: using inherited sockets from “c:\nginx\html

    2008/08/20 17:23:30 [emerg] 1072#0: invalid socket number “c:\nginx\html” in NGI
    NX environment variable, ignoring the rest of the variable

    и все. висит в памяти и ни туда ни сюда. что делать??? я в ужасе.
    А работать надо.

  10. Василий, ну никак у меня воспроизвести этот глюк не получается :-(

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Настройка nginx и PHP/FastCGI в Windows»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा