配置Nginx支持pathinfo模式

缘由

很久不使用Apache了,渐渐对Apache感到陌生,因为朋友有个ZendFramework框架从Apache移到Nginx下,需要pathinfo模式支持。

方案搜索

于是开始搜索Nginx + pathinfo相关文章,一开以为很容易就会配置好。因为搜索后发现有大量文章介绍Nginx开启pathinfo模式,感觉不是什么难事。但是经过几个小时下来,还是没有配置好。并且大量文章的内容都极其相似,基本都是转载的。

【国内直连ChatGPT 29元起】
国内直连ChatGPT,Plus会员每月29元起,支持最新o1模型探索更多领域,无需注册OpenAI账号。

开始有点急了,因为一天过去了没有配好。

继续摸索

没办法,继续搜索。为了验证方便,下载thinkphp框架搭了个环境。并且加了UserAction.class.php控制器类,在类里加了一个app方法并输出一行文字。

于是,我开始不断地改写nginx.conf文件重启Nginx,不断的刷新/index.php/User/app 地址。结果提示

502
Access defind.

又是一天过去了,开始感觉有点彷徨。

最后坚持

按理说我感觉应该有Nginx + thinkphp的先例,只是我没有搜索到答案而已。突然间感觉网上好迷茫,一个小小的问题寻求不到解答。今晚,又试着使用Nginx thinkphp关键字搜索,我一下点到十多页以后,找到一处代码

location / {        
  if (!-e $request_filename) {
    rewrite  ^/(.*)$  /index.php/$1  last;
    break;
  }
}
 
location ~ \.php {
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fcgi.conf;
  set $real_script_name $fastcgi_script_name;
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
    set $real_script_name $1;
    set $path_info $2;
  }
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
}

保存修改,重启Nginx,刷新浏览器。意想不到的页面出现了,已正常工作,终于松了一口气,实在太不容易了。

Finnal code

user  www www;
  
worker_processes 2;
worker_cpu_affinity 01 10;
  
error_log  /data1/logs/nginx_error.log  crit;
  
pid        /usr/local/webserver/nginx/nginx.pid;
  
worker_rlimit_nofile 65535;
  
events
{
  use epoll;
  worker_connections 65535;
}
  
http
{
  include       mime.types;
  default_type  application/octet-stream;
  
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
  
  sendfile on;
  tcp_nopush     on;
  
  keepalive_timeout 60;
  tcp_nodelay on;
  
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
 
  server
  {
    listen 80;
    server_name a.com;
    index index.php;
    root /data0/htdocs/a.com/www;
 
    location / {        
      if (!-e $request_filename) {
        rewrite  ^/(.*)$  /index.php/$1  last;
        break;
      }
    }
     
    location ~ \.php {
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
      set $real_script_name $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
        set $real_script_name $1;
        set $path_info $2;
      }
      fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
      fastcgi_param SCRIPT_NAME $real_script_name;
      fastcgi_param PATH_INFO $path_info;
    }
  }
} 

养成好习惯

  • 虽然最终还是解决问题了,但平日要记录一下重要的东西,网络不是万灵
  • 就算出现问题也要大概知道什么原因?能不能实现?如何实现?
  • 常遇到的问题要反思,举一反三,思考。
分享

TITLE: 配置Nginx支持pathinfo模式

LINK: https://www.qttc.net/199-nginx-pathinfo.html

NOTE: 原创内容,转载请注明出自琼台博客