LINUX.ORG.RU
решено ФорумAdmin

Выполнение php скриптов

 , , ,


0

1

Всем привет. Имею такой nginx конфиг:

upstream etherpad-lite {
    server 127.0.0.1:9001;
}

error_page 500 https://noname.com/controller?etherpad=500;
error_page 502 https://noname.com/controller?etherpad=502;
error_page 503 https://noname.com/controller?etherpad=503;
error_page 504 https://noname.com/controller?etherpad=504;

server {
    listen 443 ssl;
    
    server_name noname.xyz;
    
    access_log /var/log/virtualmin/noname.xyz_access_log;
    error_log /var/log/virtualmin/noname.xyz_error_log;
    
    ssl_certificate /home/noname/ssl.combined;
    ssl_certificate_key /home/noname/ssl.key;
    
    if ($host !~* "^noname\.xyz$") {
    	return 444;
    }
    
    if ($request_uri = "/") {
       return 444;
    }
    
    location /p/ {
    	rewrite ^/p/(.*) /$1 permanent;
    }
    
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    
    location ~ ^/(locales/|locales.json|admin/|static/|pluginfw/|javascripts/|socket.io/|ep/|minified/|api/|ro/|error/|jserror/|favicon.ico|robots.txt) {
    	proxy_pass http://etherpad-lite;
    }
    
    location / {
        proxy_pass http://etherpad-lite/p/;
        proxy_redirect / /p/;
    }
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
С выше конфига имеем определенный сервис, который использует proxy_pass. Весь код расположен по пути /home/noname/public_html/. Создал php скрипт для определенных нужд, когда вызываю его по прямой ссылке, он у меня скачивается, что не есть верно. PHP установлен. Пробовал подкинуть следующий блок с другого сервера, где крутится php сайт:
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/php-nginx/155629820914603.sock/socket;
}
Картина не изменилась. Что я мог упустить?

Ответ на: комментарий от vvn_black

Спасибо, сделал как по ссылке, но выдает 404 ошибку.

Добавил в блоке server после последнего location:

location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
        
    fastcgi_param HTTP_PROXY "";
        
    fastcgi_pass unix:/var/php-nginx/15863561136474.sock/socket;
    fastcgi_index index.php;
        
    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   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
    fastcgi_param   PATH_INFO               $fastcgi_path_info;
    fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
    fastcgi_param   REQUEST_URI             $request_uri;
    fastcgi_param   DOCUMENT_URI            $document_uri;
    fastcgi_param   DOCUMENT_ROOT           $document_root;
    fastcgi_param   SERVER_PROTOCOL         $server_protocol;
        
    fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
    fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;
        
    fastcgi_param   REMOTE_ADDR             $remote_addr;
    fastcgi_param   REMOTE_PORT             $remote_port;
    fastcgi_param   SERVER_ADDR             $server_addr;
    fastcgi_param   SERVER_PORT             $server_port;
    fastcgi_param   SERVER_NAME             $server_name;
        
    fastcgi_param   HTTPS                   $https;
        
    fastcgi_param   REDIRECT_STATUS         200;
}

lex-romanow ()
Ответ на: комментарий от lex-romanow

но выдает 404 ошибку

А зачем так в лоб копировать? Это же просто пример.

Сначала надо посмотреть как php-fpm работает, либо через сервис (обычно по умолчанию) либо через сокет.

В первом случае использовать

fastcgi_pass 127.0.0.1:9000;

во втором (только уточнить путь до сокета)

fastcgi_pass unix:/var/run/php-fpm.sock;

добавить это в соответствующий location вместе с остальными fastcgi параметрами.

И не забыть про параметр root с путём до кода.

vvn_black ★★★★★ ()
Ответ на: комментарий от vvn_black

в первом сообщении я забыл добавить параметры root и fastcgi_param, получается после последнего location я вставил следующий код (скопировал из другого своего пхп проекта):

root /home/noname/public_html;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
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 SCRIPT_FILENAME /home/noname/public_html$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT /home/noname/public_html;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/php-nginx/15863561136474.sock/socket;
}

Теперь работает.
lex-romanow ()