Phalcon Nginx设置

按照phalcon官网的配置,配了一个:

server {
    listen      80;
    server_name localhost.portal;
    root        /var/www/portal/public;
    index       index.php index.html index.htm;
    charset     utf-8;

    location / {
        try_files $uri $uri/ index.php?_url=$uri&$args;
    } 
 
    location /public/ {
        root /var/www/portal;
    } 
    location ^~ /api/ {
       root /var/www/portal;
        rewrite  ^/api/(.*)$ /api/index.php?_url=/$1 last; 
   }
 
    location ~ \.php$ {
        try_files     $uri =404;

        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index /index.php;

        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

其他url都能正常访问,可是访问api目录下的文件就会报404,api访问的目录依然是全局root目录:/var/www/portal/public,location里单设的root:/var/www/portal不生效。原因是:api路径 rewrite之后,再次访问生效的是location ~ .php$ {}配置,而这个配置继承的是全局的root。
修改为:不设全局的root,放到每个location里自行设置
把 location ~ .php$ {} 放到每个location里嵌套,就可以正常访问了。

server {
    listen      80;
    server_name localhost.portal;
    index       index.php index.html index.htm;
    charset     utf-8;
    rewrite_log on;
    access_log  /var/log/nginx/portal_access.log main;
    error_log   /var/log/nginx/portal_error.log notice;

    location / {
        root  /var/www/portal/public;    
        try_files $uri $uri/ /index.php?_url=$uri&$args;
        location ~ \.php$ {
            try_files     $uri =404;

            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index /index.php;

            include fastcgi_params;
            fastcgi_split_path_info       ^(.+\.php)(/.+)$;
            fastcgi_param PATH_INFO       $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }   
    } 
 
    location /public/ {
        root /var/www/portal;
    }
 
    location ^~ /api/  {
        root /var/www/portal;
        rewrite  ^/api/(.*)$ /api/index.php?_url=/$1 last; 
        location ~ \.php$ {
            try_files     $uri =404;

            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index /index.php;

            include fastcgi_params;
            fastcgi_split_path_info       ^(.+\.php)(/.+)$;
            fastcgi_param PATH_INFO       $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
 

    location ~ /\.ht {
        deny all;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,390评论 19 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 81,443评论 21 356
  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 9,997评论 0 41
  • 《老男孩Linux运维》笔记 隐藏Nginx软件版本号 一般来说,软件的漏洞都和版本有关。因此要尽量隐藏对访问用户...
    Zhang21阅读 9,082评论 0 28
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,054评论 6 342