编程知识 cdmana.com

About the nginx configuration of ThinkPHP

THINKPHP Of NGINX Configuration of stepping pit

Today, I'm using one to tp There are some problems with the rapid development framework based on :

nginx Screenshot of error reporting

 Insert picture description here

For the convenience of illustration, manual line wrapping

//  Override or internal redirection loop when processing 
2019/11/11 11:16:06 [error] 15164#15432: *1 rewrite or internal redirection cycle while processing 
    "/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index/user/index.html", 
    client: 127.0.0.1, 
    server: xxxxx, 
    request: "GET /index/user/index.html HTTP/1.1", 
    host: "xxxxx", 
    referrer: "xxxxx"

Misconfiguration

Reference resources larvael To configure

server {
    .
    .
    .

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    .
    .
    .
    location ~ \.php$ {
        fastcgi_pass127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
    .
    .
    .

}

Found that all paths are the same , It's all home page effects

Preliminary judgement nginx There's a problem with rewriting rules

#  route  /  Go through this match after the beginning 
#  Such as  /index /index/user 
location / {
    # $uri  Go back if you have one , perhaps $uri/  If you have a local directory, go back to , Or go back to rewrite 
    #  Local means under the root directory of the website , Such as   When  $uri=index  Just look at the root directory  index  Documents or  index/  Catalog 
    try_files $uri $uri/ /index.php?$query_string;
}

Start reporting mistakes

solve the problem

After searching online tp5 The configuration of should be

location / {
    try_files $uri $uri/ /index.php$uri?$query_string;
}

After reform , We found the problem unsolved ; Compare the configuration and find

  # location ~ \.php$  Change to   location ~ \.php(.*)$
    location ~ \.php(.*)$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include fastcgi_params;
    }

solve , Full configuration

server {
    listen       80;
    server_name  xxxxxxx ;
    root  www;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;

    index index.html index.htm index.php;
    location / {
        try_files $uri $uri/ /index.php$uri?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;


    location ~ \.php(.*)$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Some instructions

In pseudo static configuration, use try_files Instead of rewrite, Because rewrite It will match all of them ( Here is /) All requests are matched once , Such as :host.com/a.png, It's going to waste some resources ( The computing power of the server ); It also refers to laravel Add some security settings to the official configuration of .

If you use online projects, it is best to add static resource cache configuration .

location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png)$ {
    expires 30d;
}

Repair

2020-08-20 Find out get No parameters , The reason is that there is no QUERY_STRING It's empty , solve :

location / {
    #  close  query_string
    try_files $uri $uri/ /index.php$uri?$query_string;
}

Focus , Neverlost

All right, everyone , The above is the whole content of this article , You can see the people here , All are personnel . I said before ,PHP There are many technical points in this aspect , It's also because there are so many , I can't write it down , We won't read too much after writing it , So I've organized it into PDF And documentation , If you need anything, you can

Click to enter the code : PHP+「 platform 」

 Insert picture description here

 Insert picture description here


More learning can be found in 【 Benchmarking big factories 】 The high-quality goods PHP Architect tutorial catalog , As long as you can finish it, make sure your salary goes up one step ( Continuous updating )

I hope the above will help you , quite a lot PHPer There are always some problems and bottlenecks in the advanced stage , There is no sense of direction in the business code , I don't know where to start to improve , I've compiled some information about it , Including but not limited to : Distributed architecture 、 Highly scalable 、 High performance 、 High concurrency 、 Server performance tuning 、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql Optimize 、shell Script 、Docker、 Microservices 、Nginx If you need advanced advanced dry goods, you can share them for free , You can join me if you need PHP Technology exchange group

版权声明
本文为[It Abu]所创,转载请带上原文链接,感谢

Scroll to Top