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.

  • How can I make a local docker container?
  • Set up Docker Swarm on an EC2
  • Is there any way to visualize code flow in docker (or in go language)
  • java Runtime.getRuntime().availableProcessors() and nproc return different values
  • Set http_proxy for Docker parent image build
  • tor browser in docker, how using with X or Wayland
  • 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.

  • Using variable interpolation in string in Docker
  • Translate docker run command to docker compose
  • I just installed docker, but running “hello world” failed, it doesn't download image?
  • Why “docker attach” not working and blocking my konsole on ubuntu
  • Understanding the add command on dockerfile for Ubuntu
  • Permission denied when changing docker image folder
  • 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.