首页 文章

Nginx和PHP-FPM - 权限被拒绝 - Windows

提问于
浏览
2

我正在尝试在Windows 10中使用nginx配置PHP服务器,但我在途中遇到了一些问题 .

我想做什么?

如果我访问localhost我看到phpinfo页面(确定)
如果我访问localhost / phpmyadmin,我看到访问被拒绝 . (失败)
如果我访问localhost / laravel / public,我会看到laravel框架的欢迎页面 .

Foder结构

D:/ Server / apps / phpmyadmin(phpmyadmin app)
d:/服务器/斌/ nginx的
d:/服务器/斌/ PHP
d:/Server/conf/nginx/nginx.conf
d:/Server/conf/php/php.ini
d:/服务器/日志/ nginx的
d:/服务器/日志/ PHP
D:/Server/www/index.php(phpinfo页面)
D:/ Server / www / laravel(laravel项目)

我试过了什么?我添加phpmyadmin.app做Windows主机文件,并添加另一个服务器块到nginx.conf并工作,但我不想这样做 .

error.log

2015/12/20 14:14:14 [error] 6932#10736: *1 FastCGI sent in stderr: "PHP Warning:  Unknown: failed to open stream: Permission denied in Unknown on line 0" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /phpmyadmin/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

host.access.log

127.0.0.1 - - [20/Dec/2015:14:35:19 -0200] "GET /phpmyadmin/ HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" "-"
127.0.0.1 - - [20/Dec/2015:15:59:43 -0200] "GET /phpmyadmin/index.php HTTP/1.1" 404 564 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" "-"
127.0.0.1 - - [20/Dec/2015:16:01:37 -0200] "GET / HTTP/1.1" 200 24385 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" "-"
127.0.0.1 - - [20/Dec/2015:16:01:39 -0200] "GET /laravel/public/ HTTP/1.1" 200 402 "http://localhost/laravel/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" "-"

nginx-start.bat

@echo off
echo Starting Nginx...
D:\Server\bin\hidec D:\Server\bin\nginx\nginx -c D:\Server\conf\nginx\nginx.conf -p D:\Server\bin\nginx
echo Starting PHP FastCGI...
D:\Server\bin\hidec D:\Server\bin\php\php-cgi -b 127.0.0.1:9000 -c D:\Server\conf\php\php.ini

nginx.conf

worker_processes  auto;

error_log  D:/Server/logs/nginx/error.log;

events {
    worker_connections  1024;
    multi_accept        off;
}

http {
    include       D:/Server/bin/nginx/conf/mime.types;
    default_type  application/octet-stream;

    fastcgi_temp_path       D:/Server/tmp/nginx/fastcgi;
    uwsgi_temp_path         D:/Server/tmp/nginx/uwsgi;
    scgi_temp_path          D:/Server/tmp/nginx/scgi;
    client_body_temp_path   D:/Server/tmp/nginx/client-body 1 2;
    proxy_temp_path         D:/Server/tmp/nginx/proxy;

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

    server_name_in_redirect off;
    server_tokens           off;

    server_names_hash_bucket_size 64;
    server_names_hash_max_size    512;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    types_hash_max_size 2048;

    client_body_buffer_size     64k;
    client_header_buffer_size   4k;
    client_max_body_size        8M;
    large_client_header_buffers 4 64k;

    client_body_timeout     10;
    client_header_timeout   10;
    keepalive_timeout       30;
    send_timeout            10;
    keepalive_requests      10;

    fastcgi_connect_timeout      60;
    fastcgi_send_timeout         120;
    fastcgi_read_timeout         300;
    fastcgi_buffer_size          64k;
    fastcgi_buffers              4 64k;
    fastcgi_busy_buffers_size    128k;
    fastcgi_temp_file_write_size 128k;

    gzip                on;
    gzip_buffers        16 8k;
    gzip_comp_level     5;
    gzip_http_version   1.0;
    gzip_min_length     1000;
    gzip_proxied        any;
    gzip_types

    text/css text/javascript text/xml text/plain text/x-component
    application/x-javascript application/javascript application/json application/xml application/rss+xml
    font/truetype font/opentype application/vnd.ms-fontobject
    image/svg+xml;
    gzip_vary           on;

    autoindex on;

    upstream php {
        server 127.0.0.1:9000;
    }

    upstream php_pool {
        ip_hash;
        server 127.0.0.1:9000 weight=1 max_fails=3 fail_timeout=10s;
        server 127.0.0.1:9001 weight=1 max_fails=3 fail_timeout=10s;
        server 127.0.0.1:9002 weight=1 max_fails=3 fail_timeout=10s;
        server 127.0.0.1:9003 weight=1 max_fails=3 fail_timeout=10s;
    }

    server {
        listen       127.0.0.1:80;
        server_name  localhost;
        root         D:/Server/www;

        log_not_found off;
        charset utf-8;

        access_log  D:/Server/logs/nginx/host.access.log  main;

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

        location /phpmyadmin/ {
            alias          D:/Server/apps/phpmyadmin;
            fastcgi_pass   php;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $request_filename;
            fastcgi_param  REMOTE_ADDR $http_x_real_ip;
            include        D:/Server/bin/nginx/conf/fastcgi_params;
        }

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

        location ~ \.php$ {
            try_files      $uri =404;
            fastcgi_pass   php;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  REMOTE_ADDR $http_x_real_ip;
            include        D:/Server/bin/nginx/conf/fastcgi_params;
        }

        location ~* ^.+.(gif|ico|jpg|jpeg|png|flv|swf|pdf|mp3|mp4|xml|txt|js|css)$ {
            expires 30d;
            add_header Vary Accept-Encoding;
        }

        if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; }

        location ~ /(\.ht|\.git|\.svn) {
            access_log off;
            log_not_found off;
            deny  all;
        }
    }
}

来自Nginx HTTP Server的书:

别名上下文:位置 . 变量被接受 . alias是仅放置在位置块中的指令 . 它为Nginx指定了一个不同的路径来检索特定请求的文档 . 例如,请考虑以下配置:http {server {server_name localhost; root /var/www/website.com/html; location / admin / {alias / var / www / locked /;当收到对http:// localhost /的请求时,将从/var/www/website.com/html/文件夹中提供文件 . 但是,如果Nginx收到http:// localhost / admin /的请求,则用于检索文件的路径为var / www / locked / . 而且,文档根指令(root)的值不会改变 . 在动态脚本的眼中,此过程是不可见的 . 语法:目录(不要忘记尾随/)或文件路径

更新

@Richard Smith建议将更改别名更改为root,将C:/ Server / apps / phpmyadmin /更改为C:/ Server / apps并添加^〜修饰符 . 现在我使用root而不是别名我可以将SCRIPT_FILENAME备份到$ document_root $ fastcgi_script_name;

1 回答

  • 2

    在当前配置中,具有 .php 扩展名的任何文件都由相同的位置块处理,这对于laravel来说很好,但对于phpmyadmin来说是致命的 .

    您的 phpmyadmin 位置块的优先级低于 .php 位置块 . 了解如何 nginx chooses a location to process a request .

    通过使用 ^~ 修饰符,可以为 phpmyadmin 位置块提供比所有正则表达式位置块更高的优先级:

    location ^~ /phpmyadmin/ {
        root D:/Server/apps;
        fastcgi_pass   php;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        ...
    }
    

    另外: root is more efficientaliasfastcgi_index 仅在 $fastcgi_script_name 上运行,因此您需要如上所述更改 SCRIPT_FILENAME .

相关问题