Skocz do zawartości
Zaloguj się, aby obserwować  
Linux

Ngix + Php

Polecane posty

Hey, zainteresowałem się serwerem ngix - prawie wszystko już działa. Jednak mam problem:

 

Gdy wpisze w pasku adresu http://ip:81/jaki-kolwiek-plik.php *

(*Plik może nawet nie istnieć)

 

to serwer wywala:

 

502 Bad Gateway

 

Czytałem o tym ale nic nie znalazłem w bezpośrednim odniesieniu do tego serwera [było ale po rusku :)] . To chyba jakiś błąd z proxy czy coś w tym stylu :).

Może ktoś się z tym spotkał i doradzi mi jak to naprawić?

 

Z góry dzięki :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ngix niestety stworzony przez drogich towarzyszy za wschodniej granicy. (O ile pamiętam)

Na odległośc ciężko ;] coś mówić ,osobiście nie spotkałem się z takim błędem podczas mojej krótkiej zabawy w ngix.

 

Pisałeś mi że denerwują Cię wycieki pamięci z lighttpd jest to bolączka jakiejś tam starszej wersji lighttpd.

 

Gateway - Proxy przynajmniej tak się domyślam ;]

Gdzieś czytałem że wystarczy wywalić ciasteczka ;p sprobuj

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak jak już mówiłem, mam najnowszą wersje :)

 

Tak, ngix jest napisany przez ruskich :)

 

Też mi się wydaje że gateway ma związek z proxy.

 

Też widziałem ten temat z ciasteczkami ale nie pomaga :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Hey, zainteresowałem się serwerem ngix - prawie wszystko już działa. Jednak mam problem:

 

Gdy wpisze w pasku adresu http://ip:81/jaki-kolwiek-plik.php *

(*Plik może nawet nie istnieć)

 

to serwer wywala:

 

502 Bad Gateway

 

Uruchomiłeś jakiegoś managera fastcgi? Nginx nie ma własnego, trzeba skorzystać z zewnetrznego np. spawn-fcgi z lighttpd. Jeżeli tak, upewnij się, że podałeś Nginksowi ten sam adres ip i port czy socket na ktorym słucha fastcgi. Ten błąd nie jest związany z proxy jako takim tylko z "tym czymś" do czego Nginx przekazuje żądania: fastcgi, mongrel dla railsów, itp. Upewnij się, że Ty możesz się do fastcgi połączyć (jeżeli odpaliłeś na ip+port) lub, że Nginx ma prawo do zapisu i odczytu do socketa. Dyrektywa, której użyłeś w konfiguracji Nginksa to fastcgi_pass, prawda? Nie proxy_pass :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie używałem proxy_pass :)

 

Mój cfg ngixa:

 

user lighttpd lighttpd;

worker_processes 2;

 

error_log logs/error.log debug;

 

pid logs/nginx.pid;

 

events {

worker_connections 1024;

}

 

http {

include conf/mime.types;

default_type application/octet-stream;

 

log_format main '$remote_addr - $remote_user [$time_local] $status '

'"$request" $body_bytes_sent "$http_referer" '

'"$http_user_agent" "http_x_forwarded_for"';

 

access_log logs/access.log main;

 

sendfile on;

tcp_nopush on;

tcp_nodelay on;

 

server {

listen 81;

 

server_name s1.host.pl www.s1.host.pl;

 

access_log logs/host.access.log main;

 

location / {

root /home/lighttpd/;

index index.html index.htm index.php;

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location ~ .php$ {

fastcgi_pass IP:4321;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /home/lighttpd$fastcgi_script_name;

# fastcgi_param QUERY_STRING $query_string;

# fastcgi_param REQUEST_METHOD $request_method;

# fastcgi_param CONTENT_TYPE $content_type;

# fastcgi_param CONTENT_LENGTH $content_length;

#fastcgi_param REMOTE_ADDR $remote_addr;

# fastcgi_param SERVER_SOFTWARE S1;

}

 

}

}

 

Te wpisy są za komentowane bo testowałem bez nich, z nimi też nie działa.

 

Skrypt do php

 

#!/bin/bash

## ABSOLUTE path to the PHP binary

PHPFCGI="/usr/bin/php5-cgi"

FCGIPORT="4321"

## IP to bind on

FCGIADDR="IP"

## number of PHP children to spawn

PHP_FCGI_CHILDREN=5

## number of request before php-process will be restarted

PHP_FCGI_MAX_REQUESTS=1000

# allowed environment variables sperated by spaces

ALLOWED_ENV="ORACLE_HOME PATH USER"

## if this script is run as root switch to the following user

USERID=lighttpd

################## no config below this line

if test x$PHP_FCGI_CHILDREN = x; then

PHP_FCGI_CHILDREN=5

fi

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN"

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS"

ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS"

if test x$UID = x0; then

EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID"

else

EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT"

fi

echo $EX

# copy the allowed environment variables

E=

for i in $ALLOWED_ENV; do

E="$E $i=${!i}"

done

# clean environment and set up a new one

nohup env - $E sh -c "$EX" &> /dev/null &

 

Skrypt odpala się poprawnie i od tego czasu dane ip i port 4321 jest są zajęte a więc wszystko wygląda OK ale jeszcze sprawdzę czy mogę się podłączyć z pod shella.

 

Tak ogólnie to zastanawiam się też co mam dać w ALLOWED_ENV= ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Nie używałem proxy_pass :)

 

Mój cfg ngixa:

 

		   location / {
		   root   /home/lighttpd/;
		   index  index.html index.htm index.php;
	   }
	   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	   #
		location ~ .php$ {
			fastcgi_pass   IP:4321;
  # fastcgi_index  index.php;
  # fastcgi_param  SCRIPT_FILENAME  /home/lighttpd$fastcgi_script_name;
  # fastcgi_param  QUERY_STRING $query_string;
  # fastcgi_param  REQUEST_METHOD $request_method;
  # fastcgi_param  CONTENT_TYPE $content_type;
  # fastcgi_param  CONTENT_LENGTH $content_length;
  #fastcgi_param  REMOTE_ADDR $remote_addr;
  # fastcgi_param  SERVER_SOFTWARE S1;
	   }

 

Te wpisy są za komentowane bo testowałem bez nich, z nimi też nie działa.

 

1. Odkomentuj te fastcgi_param, bo bez nich w najlepszym układzie zobaczysz "No input file specified."

2. Pliki statyczne są serwowane OK?

3. Może jakiś firewall po drodze? Możesz się połączyć zwykłym telnetem na ten port? Na 200% wpisałeś taki sam port przy konfiguracji PHP i nginxa?

 

A i tak definitywną odpowiedź da ci strace -s 1000 -p <pid-pierwszego-workera-nginxa> (i wywołanie jakiegoś URLa z php na końcu). Gdzieś po drodze zobaczysz coś w stylu:

 

 connect(3, {sa_family=AF_INET, sin_port=htons(PORT), sin_addr=inet_addr("IP")}, 16) = 0

 

Jeżeli na końcu nie będzie zera, a np. "-1 ECONNREFUSED (Connection refused)" to masz już powód.

 

Skrypt odpala się poprawnie i od tego czasu dane ip i port 4321 jest są zajęte a więc wszystko wygląda OK ale jeszcze sprawdzę czy mogę się podłączyć z pod shella.

 

To sprawdź :)

 

Tak ogólnie to zastanawiam się też co mam dać w ALLOWED_ENV= ?

 

Zmienne środowiskowe, które chcesz przekazać do php-fcgi, może np. LC_ALL i okolice.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

1. Gotowe

2. Tak, na lighttpd wszystko działa.

3. Jest iptables ale nie blokuje tego portu. Telnetem z domu chyba moge (nie ma żadnego błędu) a z locala mam: telnet: could not resolve IP:4321/telnet: Name or service not known. Tak na 200% to ten sam ip i port.

 

a co do tej ścieżki to ja to ma wyglądać? http://ip...:81/.php? czy /home/.../.php? Daj przykład proszę :) Url to by pasowało z http :>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2. Tak, na lighttpd wszystko działa.
megi pewnie pytala czy dziala pod nginx'em :)

 

3. Jest iptables ale nie blokuje tego portu. Telnetem z domu chyba moge (nie ma żadnego błędu) a z locala mam: telnet: could not resolve IP:4321/telnet: Name or service not known. Tak na 200% to ten sam ip i port.
Nie pograzaj sie :) Takich kwiatkow to bym sie nawet po niektorych 'fachowcach' tutaj nie spodziewal...

 

Sproboj:

telnet <ip> <port>

:)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

p, a myślisz że jak próbowałem - odwrotnie? :[ Jeszcze na tyle.. nie jestem ;f

 

//Edit, już działa - po prostu odpaliłem wadliwą [starą] wersje skryptu do uruchamiania fastcgi. Podobne nazwy plików w tym samym katalogu, wyjście to samo a jednak nie działało :)

 

Statyczne działają pod lighttpd i pod nxginem :>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
p, a myślisz że jak próbowałem - odwrotnie? :[

Nie mysle... Wiem, ze probowales:

telnet <ip>:<port>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No tak wpisywałem racja , ale pomylić się chyba można.. zwłaszcza jak nie używało się telneta od 5 lat ;f (bo on ssie)?

 

teraz możemy wrócić do tematu czy masz zamiar pisać że telnet rox i powinienem się uczyć jego obsługi? :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
czy masz zamiar pisać że telnet rox i powinienem się uczyć jego obsługi? :)

No jako narzędzie diagnostyczne na pewno się przydaje stąd warto umieć go obsługiwać :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok, w wolnym czasie się pouczę (czyt. kiedy będę miał net na laptopie w każdym miejscu w domu bo aktualnie tylko przy oknie :) [nie wygodne miejsce do nauki :)])

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ę

Zaloguj się, aby obserwować  

×