Как запустить скрипты CGI на Nginx

17

У меня проблема с настройкой скриптов CGI для Nginx, пока я нашел ссылку , но проблема что я не могу заставить скрипт perl запускаться как сервис, чтобы он работал в фоновом режиме, и даже в случае его перезапуска он запускается автоматически

Есть ли у вас идеи? Я запускаю Centos 5

Я нашел несколько решений здесь , но я не смог интегрировать код, указанный здесь, с этим Perl-скриптом Я абсолютно нул в Perl, пожалуйста, помогите мне Спасибо

    
задан Askhat 26.07.2012 в 12:36
источник

4 ответа

11

Nginx - это веб-сервер. Вам нужно использовать сервер приложений для своей задачи, например, uWSGI . Он может разговаривать с nginx, используя свой собственный очень эффективный двоичный интерфейс, называемый uwsgi.

    
ответ дан VBart 26.07.2012 в 13:55
  • Поскольку OP помечен perl, PSGI / Plack (Perl WSGI + Rack), вероятно, является тем, что необходимо. –  Ashley 26.07.2012 в 19:05
  • Я буду проклят; только что узнал, что uWSGI включает поддержку PSGI, так что, хорошо! –  Ashley 26.07.2012 в 19:26
  • Вы говорите, что Apache и Lighttpd, а также многие другие не являются веб-серверами, потому что они поддерживают CGI? Использование «сервера приложений» для запуска CGI-скриптов является излишним. –  Alex K 28.02.2014 в 12:34
  • Apache может быть как сервером приложений, так и веб-сервером. Он работает как сервер приложений, когда он запускает ваши веб-приложения. Lighttpd не запускает сам CGI. Он взаимодействует с приложением, используя протокол FastCGI, например nginx. –  VBart 01.03.2014 в 22:14
11

Nginx не имеет встроенной поддержки CGI (вместо этого он поддерживает fastCGI). Типичным решением для этого является запуск вашего Perl-скрипта в качестве процесса fastCGI и редактирование файла конфигурации nginx для перенаправления запросов на процесс fastCGI. Это довольно сложное решение, если все, что вы хотите сделать, это запустить скрипт CGI.

Вам нужно использовать nginx для этого решения? Если все, что вы хотите сделать, это выполнить некоторые скрипты Perl CGI, подумайте об использовании Apache или Lighttpd, поскольку они поставляются с модулями CGI, которые будут обрабатывать ваши сценарии CGI изначально и не требуют, чтобы сценарий запускался как отдельный процесс. Для этого вам необходимо установить веб-сервер и отредактировать файл конфигурации веб-сервера для загрузки модуля CGI. Для Lighttpd вам нужно будет добавить строку в файл конфигурации, чтобы разрешить обработку файлов CGI. Затем поместите файлы CGI в папку cgi-bin.

    
ответ дан David Farrell 26.07.2012 в 13:22
  • Спасибо за ваш комментарий, да мне нужно использовать Nginx, потому что весь веб-сайт работает под Nginx, и теперь у меня есть этот (forkosh.com/mimetex.html) скрипт CGI для запуска под веб-сайтом, веб-сайт это математический тест, поэтому мне нужна поддержка нотации Mimetex, но он запускается только как CGI ... до сих пор я настроен на FastCGI для PHP-скриптов, но он не работал для простого CGI :( пожалуйста, помогите ... –  Askhat 26.07.2012 в 13:27
  • Хотя apache и lighttpd поставляются с собственным модулем cgi, скрипты cgi по-прежнему выполняются в отдельном процессе - в качестве дочернего процесса веб-сервера. Их модуль cgi выполняет только работу, такую ​​как синтаксический анализ URL, заполнение переменных среды. –  cli__ 06.07.2014 в 10:35
  • Вы когда-нибудь выясняли, как запускать скрипты CGI с помощью NGINX? У меня FASTCGI правильно настроен, но когда я запускаю CGI-скрипт, все, что я вижу, это код скрипта. –  trynacode 26.06.2016 в 21:16
  • Спасибо! Этот ответ может не помочь ОП, но это мне помогло. Кстати, знаете ли вы, почему NGINX даже не планировал поддерживать CGI? CGI, кажется, приятный запас для меня. –  Franklin Yu 02.03.2017 в 20:22
11

Установите еще один веб-сервер (Apache, Lighttpd), который выполняется на другом порту. Затем проксируйте свой запрос CGI на веб-сервер с помощью nginx.

Вам просто нужно добавить это в конфигурацию nginx после установки веб-сервера на 8080

location /cgi-bin {
    proxy_pass http://127.0.0.1:8080
}

Удача

    
ответ дан Burak Tamtürk 26.07.2012 в 14:02
  • должен ли я создать другой экземпляр веб-сервера на другом порту? Я имею в виду, мне нужно установить новый экземпляр Nginx ?? или это должен быть Apache один? –  Askhat 27.07.2012 в 14:11
  • Вы должны установить apache или lighthttpd на другой порт, а затем проксировать его в папку cgi-bin через nginx. –  Burak Tamtürk 27.07.2012 в 14:14
  • В чем преимущество этого? Почему бы просто не запустить Apache самостоятельно? Какие преимущества дает NGINX как средний уровень? –  Octopus 05.02.2015 в 01:04
  • Вы можете обслуживать статические файлы или fastcgi во время обслуживания некоторых скриптов cgi. Nginx обслуживает статические файлы и связанные с fastcgi вещи быстрее, чем apache, из-за дизайна событий nginx. Nginx не выполняет скрипты cgi по дизайну, так как он должен быть открыт новый поток или процесс для обработки скрипта cgi. –  Burak Tamtürk 05.02.2015 в 09:26
0

Я нашел этот хак, используя FastCGI, немного лучше, чем запуск другого веб-сервера. Ссылка

    
ответ дан Alton Yu 08.11.2017 в 19:28