PHP Application redirection cycle

I have this application working on a standard LAMP stack, but when i try to run it in a docker nginx + php-fpm i get an error (using richarvey/nginx-php-fpm. docker container).

Edit: This container runs nginx and php-fpm in the same container.

  • Docker workflow design with Jenkins on production
  • Having trouble automating docker containers with laravel
  • Docker 32-bit Image downloaded, but tells its a 64-bit architecture
  • Dockerfile for multiple Docker containers
  • why run exec command?
  • Port data out of docker container
  • http://ip-vm/sistema/index.php/gui/gui/login

    app error

    server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6
    
        root /usr/share/nginx/html;
        index index.php index.html index.htm;
    
        # Make site accessible from http://localhost/
        #server_name localhost;
    
        # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
        sendfile off;
    
        # Add stdout logging
    
        error_log /dev/stdout info;
        access_log /dev/stdout;
    
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                index index.php;
                try_files $uri $uri/ /sistemavtr/index.php/$args;
        }
    
        #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 /usr/share/nginx/html;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                fastcgi_split_path_info       ^(.+\.php)(.*)$;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO       $fastcgi_path_info;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_read_timeout 120;
        }
    
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
                expires           5d;
        }
    
        # deny access to . files, for security
        #
        location ~ /\. {
                log_not_found off;
                deny all;
        }
    

    And this is the stdout error:

    2016/04/13 23:23:13 [error] 20#0: *6 rewrite or internal redirection cycle while internally redirecting to “/sistema/index.php/”, client: 192.168.139.1, server: , request: “GET /sistema/index.php/gui/gui/login HTTP/1.1”, host: “192.168.139.132”

    192.168.139.1 – – [13/Apr/2016:23:23:13 +0000] “GET /sistema/index.php/gui/gui/login HTTP/1.1” 500 594 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36”

    So, im not sure if is the PHP Codeigniter App + ExtJS the problem, or is the URL pattern (index.php/gui/gui/login) what is not working.

  • How to debug dockerfiles when using gcloud and google app engine
  • Is there any reason to favour concatenated RUN directives over RUNning a script?
  • Building a Docker Image via compose results into a new image. why?
  • Apply changes to docker container after 'exec' into it
  • Docker daemon config file on boot2docker / docker-machine / Docker Toolbox
  • Docker linux: How to start multiple console/terminals for one running container?
  • 2 Solutions collect form web for “PHP Application redirection cycle”

    your config of nginx, part for fastcgi

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
            fastcgi_split_path_info       ^(.+\.php)(.*)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO       $fastcgi_path_info;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_read_timeout 120;
    }
    

    Your config tries to proxy php to unix socket, not to the 9000 port.

    Should be fastcgi_pass unix:/var/run/php5-fpm.sock; changed to fastcgi_pass 127.0.0.1:9000

    Next. Try to watch php-fpm config, there you should find listening port.

    And finally – if you are using docker – be sure, that all docker hosts are accessible from each other

    UPD 1: Seems it can be also problem with .htaccess – there are can be saved apache rules for specific host, for example – redirecting. PHP-FPM doesn’t read that file and ignore it.

    UPD 2: .htaccess can be found in PHP web root folder (where your index.php is located)

    So, finally the problem was the default.conf.

    Using this question as guide to configure it i finally made it: Nginx doesn’t server subfolder api application (php-fpm)

    So my /etc/nginx/sites-enabled/default.conf end like this:

    server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6
    
        root /usr/share/nginx/html;
        index index.php index.html index.htm;
    
        # Make site accessible from http://localhost/
        #server_name localhost;
    
        # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
        sendfile off;
    
        # Add stdout logging
    
        error_log /dev/stdout info;
        access_log /dev/stdout;
    
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                index index.php;
                try_files $uri $uri/ /index.php?$query_string;
        }
        location /sistema/ {
                index /server/index.php;
                try_files $uri /server/index.php/$uri;
        }
        #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 /usr/share/nginx/html;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php {
                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                include fastcgi_params;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_read_timeout 120;
        }
    
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
                expires           5d;
        }
    
        # deny access to . files, for security
        #
        location ~ /\. {
                log_not_found off;
                deny all;
        }
    

    Im not very sure how this really works, so, its how i make it work but if anyone can explain this to me, i will be very grateful.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.