简体   繁体   中英

nginx server connecting to docker containers running laravel

I need to configure an nginx server to connect to multiple docker.networks for different projects. As of now, I am trying to connect nginx to one docker.network.

The docker.network has php (laravel) and mysql in two different containers.

Here is the nginx configuration:

upstream web {
    server 127.0.0.1:9000;
}

server {
    listen      443 ssl http2;
    listen      [::]:443 ssl http2;
    server_name tinyurl.abc.org;
    root        /home/azureuser/app/url-shorterner/public;

    ssl_certificate      /home/azureuser/app/certs/abc.org.crt;
    ssl_certificate_key  /home/azureuser/app/certs/abc.org.key;

    error_log  /var/log/nginx/error.log  error;

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

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$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  web;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME /tinyurl/public$fastcgi_script_name;
        fastcgi_param QUERY_STRING $query_string;
        include       fastcgi_params;
    }

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

server {
    listen      80;
    listen      [::]:80;
    server_name tinyurl.abc.org;
    return      301 https://$server_name$request_uri;
}

The docker-compose.yml file has the following:


version: '3.8'

# Services
services:

  # Web (Application) Service
  web:
    build:
      context: ./.docker/web
      args:
        HOST_UID: $HOST_UID
    container_name: tinyurl-web
    ports:/
      - '9000:9000'
    volumes:
      - '.:/var/www/html'
    depends_on:
      mysql:
        condition: service_healthy

  # MySQL Service
  mysql:
    image: mysql/mysql-server:8.0
    container_name: tinyurl-mysql
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
      MYSQL_ROOT_HOST: '${DB_HOST}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_HOST: '${DB_HOST}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
    volumes:
      - ./.docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - mysqldata:/var/lib/mysql
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD
      interval: 5s
      retries: 10

  # Scheduler Service
  scheduler:
    image: mcuadros/ofelia:latest
    container_name: tinyurl-scheduler
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./.docker/scheduler/config.ini:/etc/ofelia/config.ini
    depends_on:
      - web

volumes:
  mysqldata:
    driver: local

The problem seems to be in the routing of the request. The index.page within the public folder of laravel shows up, but none of the other static pages are showing up. Also, the routing of the requests is not happening correctly.

Looks like the fastcgi configuration is not okay.

Can anyone help with this, and point me to what needs to be done to the nginx configuration to route to the web container having laravel.

With Regards, Sharat

In your nginx config, replace 127.0.0.1 with the service name in your docker-compose

upstream web {
    server web:9000;
}

server {
   ...

    location ~ \.php$ {
        fastcgi_pass  http://web;
   ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM