Skocz do zawartości
baltazar_gabka

nginx + fcgiwrap - bład 403 Forbidden

Polecane posty

Witam.

Próbuję uruchmić skrypt CGI na swoim serwerze.

Mam postawiony nginx + fcgiwrap.

Fcigwrap instalowałem zgodnie z ta instrukcją: https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/

aptitude install fcgiwrap
cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf

mkdir /var/www/cgitest
touch /var/www/cgitest/index.cgi
vim  /var/www/cgitest/index.cgi

ls -la /var/www

drwxr-xr-x  4 root root 4096 gru  9 21:29 .
drwxr-xr-x 13 root root 4096 gru  8 20:12 ..
drwxr-xr-x  2 root root 4096 gru  9 21:30 cgitest

W nginx mam coś takiego:

server {
    listen 80;
    server_name domena.pl;
    root /var/www/cgitest;
    include /etc/nginx/fcgiwrap.conf;


    location / {
      index  index.html index.htm index.pl;
    }

    location ~ \.pl|cgi$ {
      try_files $uri =404;
      gzip off;
      fastcgi_pass        unix:/run/fcgiwrap.sock;
      fastcgi_index index.cgi;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include fastcgi_params;
      }
}

Po restarcie serwera w logach są takie wpisy:

016/12/09 21:33:06 [error] 5160#0: *1 directory index of "/var/www/cgitest/" is forbidden, client: 88.151.138.228, server: domena.pl, request: "GET / HTTP/1.1", host: "domena.pl"

Plik fcgiwrap.conf wygląda następująco:


location /cgi-bin/ {
  gzip off;
  root  /usr/lib;
  fastcgi_pass  unix:/var/run/fcgiwrap.socket;

  include /etc/nginx/fastcgi_params;

  fastcgi_param SCRIPT_FILENAME  /usr/lib$fastcgi_script_name;
}

Katalogu /usr/lib/cgi-bin nie ma na mojej maszynie. Czy tak powinien wyglądać ten plik?

Z czego może wynikać błąd 403?

 

 

 

 

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Fcgiwrap to nasz wynalazek (http://www.megiteam.pl/blog/baza-wiedzy/fcgiwrap/) :D Miło widzieć, że ktoś tego używa.

Z logów widzę, że żądanie jest do http://domena.pl/ - co się stanie jak wywołasz URLa http://domena.pl/index.cgi? Masz skonfigurowane, że żądania do .pl|cgi mają iść do fcgiwrapa a także, że domyślnym plikiem jest index.pl a masz w katalogu index.cgi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zmieniłem index.pl na index.cgi i teraz mam taki błąd:

2016/12/09 22:05:19 [crit] 5208#0: *1 connect() to unix:/run/fcgiwrap.sock failed (2: No such file or directory) while connecting to upstream, client: 88.151.138.228, server: domena.pl, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/fcgiwrap.sock:", host: "domena.pl"
2016/12/09 22:05:19 [crit] 5208#0: *1 connect() to unix:/run/fcgiwrap.sock failed (2: No such file or directory) while connecting to upstream, client: 88.151.138.228, server: domena.pl, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/fcgiwrap.sock:", host: "domena.pl"
ls -la /run | grep fcgi
srw-rw-rw-  1 root  root      0 gru  8 23:45 fcgiwrap.socket
Edytowano przez Gość (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok, czyli nginx już próbuje przekazać żądanie do fcgiwrapa ale nie może się do niego połączyć przez socket, który mu podałeś. Działa Ci ten fcgiwrap i słucha na sockecie /run/fcgiwrap.sock? Masz taki plik? Jeżeli tak to jakie ma uprawnienia? Nginx musi móc do niego pisać i czytać czyli ma mieć rw dla nginxa.

EDIT

 

masz inny socket niż podałeś w konfigu :)

Edytowano przez megi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
ls -la /var/run/ | grep fcgi
srw-rw-rw-  1 root  root      0 gru  8 23:45 fcgiwrap.socket

Sa prawa rw.

Czy po stronie nginx i configa fcgiwrap muszą być te same sockety ?

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W skrócie tak. Socket to tak jak port. Jeżeli fcgiwrap czeka na żądania na 12345 a nginx wysyła żądania do 6789 to się nie dogadają. Nginx musi się łączyć do socketu na którym działa fcgiwrap.

EDIT

A i w ogóle to z roota uruchamiasz tego fcgiwrapa? Ogólnie to nie jest dobry pomysł, żeby strony działały z roota. Docelowo uruchom go na nieuprzywilejowanym userze.

Edytowano przez megi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W pliku /etc/nginx/fcgiwrap.conf dodałem:

fastcgi_pass  unix:/var/run/fcgiwrap.socket;

W nginx dodałem także wpis:

fastcgi_pass        unix:/var/run/fcgiwrap.socket;

W logach nginx nie ma żadnych błędów.

W przeglądarce wyświetla się tylko napis:

403 Forbidden

Z tego co widzę to fcgiwrap jest uruchomiony z użytkownika www-data.

Chociaż gdzie jest to ustawione to nie wiem.

ps aux | grep fcgiwrap
www-data  5589  0.0  0.0  26320   928 ?        Ss   12:02   0:00 /usr/sbin/fcgiwrap

EDIT:

Zmieniłem prawa do pliku index.cgi na 755 i teraz poszło.

 

Edytowano przez baltazar_gabka (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×