Title: 502 Bad Gateway Error when Configuring base_url
in CodeIgniter with Nginx and Docker
Description:
I have a legacy CodeIgniter application running in a Dockerized environment with PHP-FPM, MySQL, and Nginx. The application works fine when I set the base_url
in application/config/config.php
to the IP address or http://domain_name.in:8086/
, but when I configure it as https://domain_name.in/
, I encounter a “502 Bad Gateway” error.
Setup Details:
- Docker Compose Configuration:
version: '3.9'
services:
app:
build:
context: .
dockerfile: dockerfile
container_name: php-fpm
volumes:
- .:/var/www/html
networks:
- mynetwork
depends_on:
- db
db:
image: mysql:5.7
container_name: database
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
- ./data_dump.sql:/docker-entrypoint-initdb.d/data_dump.sql:ro
networks:
- mynetwork
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./nginx-1.17.6/conf/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- .:/var/www/html
depends_on:
- app
volumes:
db_data:
networks:
mynetwork:
driver: bridge
- PHP-FPM Dockerfile:
FROM php:7.0-fpm
RUN docker-php-ext-install mysqli
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/freetype2 --with-jpeg-dir=/usr/include \
&& docker-php-ext-install gd
EXPOSE 9000
- Nginx Configuration:
The Nginx server in Docker listens on port 8080 and proxies requests to the PHP-FPM container. I also have an external Nginx server on the host server, which proxies to the Dockerized Nginx server.
- Cloudflare Configuration:
- I am using Cloudflare with Flexible SSL, where Cloudflare handles SSL termination and forwards traffic to my server over HTTP.
Issue:
When I set the base_url
in application/config/config.php
to https://domain_name.in/
, I get a “502 Bad Gateway” error. However, when I set the base_url
to either the IP address or http://domain_name.in:8086/
, the application redirects correctly to the app.
$config['base_url'] = 'https://domainname.in/';
What I’ve Tried:
- Ensured that both Nginx in the Docker container and the external Nginx server on the host are configured to properly proxy requests.
- Verified that the ports for Nginx and PHP-FPM are open and accessible.
- Checked Cloudflare SSL settings (Flexible SSL is enabled).
- Confirmed that my external Nginx server correctly forwards requests to the Docker Nginx container.
- Ensured that both the base URL and SSL configurations are correct in the app and Nginx.
Questions:
- Why am I encountering a 502 Bad Gateway error when using
https://domain_name.in/
in thebase_url
config, but not withhttp://domain_name.in:8086/
or the IP address? - Could the issue be related to Cloudflare’s Flexible SSL configuration, or is it an Nginx misconfiguration?
- Are there any specific adjustments I need to make to my Nginx configuration to properly handle the HTTPS requests from Cloudflare?
Any help or suggestions would be greatly appreciated!