0

I'm trying to install phpBB (3.2.7) on my CentOS 7 VPS with Nginx, and I keep getting alternately these errors:

  • 403 - Forbidden
  • The Nginx default page saying the web server is functioning, but 404 upon trying to access http://1.2.3.4/install (required for installing phpBB)
  • 502 bad gateway (current predicament)

Below is my /etc/nginx/nginx.cfg:

user    nginx nginx;

events {
    worker_connections  1024;
}

http {
    include     /etc/nginx/mime.types;

    # Compression - requires gzip and gzip static modules.
    gzip on;
    gzip_static on;
    gzip_vary on;
    gzip_http_version 1.1;
    gzip_min_length 700;

    # Compression levels over 6 do not give an appreciable improvement
    # in compression ratio, but take more resources.
    gzip_comp_level 6;

    # IE 6 and lower do not support gzip with Vary correctly.
    gzip_disable "msie6";
    # Before nginx 0.7.63:
    #gzip_disable "MSIE [1-6]\.";

    # Catch-all server for requests to invalid hosts.
    # Also catches vulnerability scanners probing IP addresses.
    server {
        # default specifies that this block is to be used when
        # no other block matches.
        listen 80 default;

        server_name bogus;
        return 444;
        root /var/empty;
    }

    # NOTE: uncommenting this section causes the program to print to console: 
    #'nginx: [warn] conflicting server name "1.2.3.4" on 0.0.0.0:80, ignored'
    # Typing in my VPS IP results in 414 - URI Too Large 
    # http://1.2.3.4/1.2.3.4/1.2.3.4/1.2.3.4 ...

    # If you have domains with and without www prefix,
    # redirect one to the other.
    #server {
    #    # Default port is 80.
    #    listen 80;
    #    server_name 1.2.3.4;
         # A trick from http://wiki.nginx.org/Pitfalls#Taxing_Rewrites:
    #    return 301 1.2.3.4$request_uri;
    #}

    # The actual board domain.
    server {
        listen [::]:80;
        listen 80;
        server_name 1.2.3.4;
        root /var/www/html/mydomain.com/phpBB-3.2.7;

        location / {
            # phpBB uses index.htm
            index index.php index.html index.htm;
            try_files $uri $uri/ @rewriteapp;
        }

        location @rewriteapp {
            rewrite ^(.*)$ /app.php/$1 last;
        }

        # Deny access to internal phpbb files.
        location ~ /(config\.php|common\.php|cache|files|images/avatars/upload|includes|(?<!ext/)phpbb|store|vendor) {
            deny all;
            # deny was ignored before 0.8.40 for connections over IPv6.
            # Use internal directive to prohibit access on older versions.
            internal;
        }

        # Pass the php scripts to fastcgi server specified in upstream declaration.
        location ~ \.php(/|$) {
            # Unmodified fastcgi_params from nginx distribution.
            include fastcgi_params;
            # Necessary for php.
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            try_files $uri $uri/ /app.php$is_args$args;
            fastcgi_pass php;
        }

        # Correctly pass scripts for installer
        location /install/ {
            # phpBB uses index.htm
            try_files $uri $uri/ @rewrite_installapp;

            # Pass the php scripts to fastcgi server specified in upstream declaration.
            location ~ \.php(/|$) {
                # Unmodified fastcgi_params from nginx distribution.
                include fastcgi_params;
                # Necessary for php.
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                fastcgi_param DOCUMENT_ROOT $realpath_root;
                try_files $uri $uri/ /install/app.php$is_args$args;
                fastcgi_pass php;
            }
        }

        location @rewrite_installapp {
            rewrite ^(.*)$ /install/app.php/$1 last;
        }

        # Deny access to version control system directories.
        location ~ /\.svn|/\.git {
            deny all;
            internal;
        }
    }

    # If running php as fastcgi, specify php upstream.
    upstream php {
        server 127.0.0.1:9000;
    }
}

Other info:

  • Changed the following lines in /etc/php.ini:

    max_execution_time = 180
    max_input_time = 60
    memory_limit = 256M
    upload_max_filesize = 64M
    
  • I'm using a static IP because I'm waiting for my domains to be transferred from my previous hosting company. I assume I can place the VPS' static IP (e.g. 1.2.3.4) in place of the actual domain and replace it with the domain after it has been transferred?

1 Answer 1

0

So I fixed it, not sure what exactly did the trick but uncommenting the commented block above was an expensive detour that imparted a valuable lesson about trusting one's earlier judgments.

/etc/nginx/nginx.cfg:

user        nginx nginx;
error_log   /var/log/nginx.error_log info;  # [ debug | info | notice | warn | error | crit ]

events {
    worker_connections   4096;
}

http {
    include     mime.types;
    include     /etc/nginx/sites_enabled/*.conf;
    server_names_hash_bucket_size 64;

    # Compression - requires gzip and gzip static modules.
    gzip on;
    gzip_static on;
    gzip_vary on;
    gzip_http_version 1.1;
    gzip_min_length 700;

    # Compression levels over 6 do not give an appreciable improvement
    # in compression ratio, but take more resources.
    gzip_comp_level 6;

    # IE 6 and lower do not support gzip with Vary correctly.
    gzip_disable "msie6";
    # Before nginx 0.7.63:
    #gzip_disable "MSIE [1-6]\.";

    # Catch-all server for requests to invalid hosts.
    # Also catches vulnerability scanners probing IP addresses.
    server {
        # default specifies that this block is to be used when
        # no other block matches.
        listen         80 default_server;
        listen         [::]:80 default_server;

        server_name bogus;
        return 444;
        root /var/empty;
    }

    # If running php as fastcgi, specify php upstream.
    upstream php {
        server 127.0.0.1:9000;
    }
}

/etc/nginx/sites_available/exampledomain.com.conf:

server {
    listen          80;
    server_name     exampledomain.com www.exampledomain.com;
    root            /var/www/html/exampledomain.com/phpBB-3.2.7;

    location / {
        # phpBB uses index.htm
        index index.php index.html index.htm;
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    # Deny access to internal phpbb files.
    location ~ /(config\.php|common\.php|cache|files|images/avatars/upload|includes|(?<!ext/)phpbb|store|vendor) {
        deny all;
        # deny was ignored before 0.8.40 for connections over IPv6.
        # Use internal directive to prohibit access on older versions.
        internal;
    }

    # Pass the php scripts to fastcgi server specified in upstream declaration.
    location ~ \.php(/|$) {
        # Unmodified fastcgi_params from nginx distribution
        include fastcgi_params;

        # Necessary for php
        fastcgi_split_path_info  ^(.+\.php)(/.*)$;
        fastcgi_param   PATH_INFO $fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param   DOCUMENT_ROOT $realpath_root;
        try_files   $uri $uri/ /app.php$is_args$args;
        fastcgi_pass    php;
    }

    # Correctly pass scripts for installer
    location /install/ {
        # phpBB uses index.htm
        try_files $uri $uri/ @rewrite_installapp;

        # Pass the php scripts to fastcgi server specified in upstream declaration.
        location ~ \.php(/|$) {
            # Unmodified fastcgi_params from nginx distribution.
            include fastcgi_params;

            # Necessary for php.
            fastcgi_split_path_info     ^(.+\.php)(/.*)$;
            fastcgi_param PATH_INFO     $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME   $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;

            try_files $uri $uri/ /install/app.php$is_args$args;
            fastcgi_pass php;
        }
    }

    location @rewrite_installapp {
        rewrite ^(.*)$ /install/app.php/$1 last;
    }

    # Deny access to version control system directories.
    location ~ /\.svn|/\.git {
        deny all;
        internal;
    }
}

A few things to note:

  • To save myself trouble down the road I moved the server block out of /etc/nginx/nginx.conf to a separate file in /etc/nginx/sites_available with a symlink to /etc/nginx/sites_enabled.
  • IPv4 address has been replaced by exampledomain.com. This is because my domain was transferred in the time between OP and this answer, so I no longer had to use the IP.
  • Had to downgrade to PHP 7.2 for phpBB to work; after trying a few guides unsuccessfully I achieved it with this guide here.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .