Nginx가 처리하지 않고 왜 PHP 파일을 다운로드합니까?


12

나는 같은 문제를 보았고 타입 핸들러를 추가하는 것에 대한 많은 해결책을 보았지만 그것은 아파치에 대한 것이었다.

Arch Linux, Nginx, PHP 및 PHP-FMP를 사용하고 있는데 PHP 파일이 왜 실행되는 대신 다운로드되는지 이유를 알 수 없습니다.

내 nginx.conf는 다음과 같습니다.

#user http;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm index.php;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            try_files $uri =404;
        root           html;
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    server {
    listen  80;
    server_name arch;
    access_log  /srv/http/arch/logs/access.log;
    error_log   /srv/http/arch/logs/error.log;
    location / {
        root    /srv/http/arch/httpdocs;
        index   index.html;
    }
    }

}

mime.types 파일을 추가하도록 편집하십시오.

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/x-javascript              js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg;

    application/java-archive              jar war ear;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.ms-excel              xls;
    application/vnd.ms-powerpoint         ppt;
    application/vnd.wap.wmlc              wmlc;
    application/vnd.google-earth.kml+xml  kml;
    application/vnd.google-earth.kmz      kmz;
    application/x-7z-compressed           7z;
    application/x-cocoa                   cco;
    application/x-java-archive-diff       jardiff;
    application/x-java-jnlp-file          jnlp;
    application/x-makeself                run;
    application/x-perl                    pl pm;
    application/x-pilot                   prc pdb;
    application/x-rar-compressed          rar;
    application/x-redhat-package-manager  rpm;
    application/x-sea                     sea;
    application/x-shockwave-flash         swf;
    application/x-stuffit                 sit;
    application/x-tcl                     tcl tk;
    application/x-x509-ca-cert            der pem crt;
    application/x-xpinstall               xpi;
    application/xhtml+xml                 xhtml;
    application/zip                       zip;

    application/octet-stream              bin exe dll;
    application/octet-stream              deb;
    application/octet-stream              dmg;
    application/octet-stream              eot;
    application/octet-stream              iso img;
    application/octet-stream              msi msp msm;

    audio/midi                            mid midi kar;
    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/x-flv                           flv;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
}

1
우리의 출력을 보여주십시오 nginx -Vphp-fpm -m?
quanta

답변:


6

추가 할 사항 :

나는 같은 거래를했지만 수정 사항을 적용한 후에 ol 'ctrl + shift + r은 페이지가 다운로드 된 브라우저의 캐시를 새로 고칠만큼 충분하지 않았습니다.

캐시를 더 철저하게 지우면 예상대로 작동합니다.


1
나는 모든 것을 시도하고 아무데도 당신의 "추가해야 할 메모"가 온다 ... 그냥 고통스러운 시간을 절약했다. 메모 주셔서 감사합니다 :)
RonzyFonzy

대단해! ^ _ ^
rm-vanda 님

4

이 문제를 해결할 수 있었지만 문제는 여전히 서버에 Apache 설정이 있다는 사실과 관련이있는 것으로 보이며 Apache의 일부는 Apache 인 경우에도 Nginx의 PHP 페이지 서버 기능과 충돌합니다. 실행되지 않았습니다.

같은 문제가 발생하면 Apache, PHP 및 모든 관련 모듈을 제거하고 필요한 것을 다시 설치하십시오.


2

이 파일에 아무것도 포함되어 있습니까?

(mime.types 포함)

그렇지 않은 경우 모든 파일이 다운로드 파일의 MIME / 유형을 얻으므로

(default_type 응용 프로그램 / 옥텟 스트림)

PHP가 목록에 없기 때문에 이것이 문제입니다.

해결책 :이 파일을 해당 파일에 추가하고 ngnix를 다시 시작하십시오.

text/php                             php php5;

예, 원래 게시물에 추가했습니다

파일에 추가해야 할 PHP MIME / 유형을 추가했습니다

시간 내 주셔서 감사하지만 nginx를 다시 시작한 후에도 여전히 작동하지 않습니다. 다른 아이디어가 있습니까?

이 가이드 읽어 adityo.blog.binusian.org/?p=428을 바로 모든 단계가 작성 및 확인

아치 리눅스를 사용하고 있으므로 페이지가 실제로 그렇게 많이 비교하지는 않습니다. 여기에 내가 사용한 페이지가 있습니다 : wiki.archlinux.org/index.php/…

1

구성이 비효율적이며 잠재적으로 안전하지 않은 것으로 나타납니다. https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/를 참조 하십시오


1
안녕하세요, 사실이 아닙니다. Try_files는 내부 URI 포인터를 설정 한 다음 위치 블록 처리를 계속합니다. 같은 위치에서 PHP로 보낼 때 완벽하게 괜찮습니다.
Martin Fjordvald

과연. 잘못된 정보를 제거하기 위해 답변을 수정했습니다
Dayo

0

내 위치 ~ .php는 다음과 같습니다. 왜 시도하지 않습니까?

location ~ \.php {
        try_files $uri =404; #This line closes a big security hole
                             #see: http://forum.nginx.org/read.php?2,88845,page=3
        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_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        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;

        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_pass 127.0.0.1:9000;
}

또한 /etc/php/php-fpm.conf로 이동하여 다음을 시도하십시오.

listen = 127.0.0.1:9000
;listen = /var/run/php-fpm/php-fpm.sock

방금 시도했지만 여전히 파일을 다운로드합니다.
셰인 그랜트

@ShaneGrant 아치 bbs의 사용자는 당신과 같은 문제가 있으며, 이전 설정에서 apache와 php를 제거하고 nginx와 php를 다시 설치하여 문제를 해결했습니다. 이 체크 아웃 링크
조지 Tasioulis

0

다음 명령을 실행하십시오.

sudo apt-get install php-gettext
sudo nano /etc/nginx/sites-available/default

다음 코드를 default파일 과 비교 하십시오.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • Remove cache 브라우저에서
  • Nginx를 다시 시작하십시오

sudo systemctl 다시 시작 nginx

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.