WordPress Nginx выдает мне ошибку «403 запрещено»

#wordpress #docker #nginx #proxy

#wordpress #docker #nginx #прокси

Вопрос:

Я пытаюсь настроить WordPress «установленный с помощью docker image» на сервере Nginx.

Я запускаю образ docker, используя следующий docker-compose.yml файл

 version: "3"
services:

    wordpress_app:
        image: wordpress:latest
        restart: always
        container_name: wordpress_app
        environment:
            WORDPRESS_DB_HOST: mysql_server:3306
            WORDPRESS_DB_USER: db_username
            WORDPRESS_DB_PASSWORD: db_password
            WORDPRESS_DB_NAME: db_name
        depends_on:
            - mysql_server
        volumes:
            - /data/wordpress_app/public_html:/var/www/html
        ports:
            - 8000:80
            - 8001:443

    mysql_server:
        image: mysql:latest
        restart: always
        container_name: mysql_server
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_username
            MYSQL_PASSWORD: db_password
            MYSQL_ROOT_PASSWORD: root_password
        volumes:
            - mysql_server_data:/var/lib/mysql

volumes:
    mysql_server_data:

networks:
    default:
       external:
           name: nginx-network
  

Теперь я пытаюсь прокси-сервер общедоступного домена usa.mydomain.com для localhost:8000

 server {
    listen 80;
    server_name usa.mydomin.com;

    root /var/www/html;

    access_log off;
    error_log /var/log/nginx/usa.mydomain.com-error.log;

    index index.html index.php;

    location / {
        # First attempt to serve request as file, then as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.php?$args;
    }


    # pass the PHP scripts to FastCGI server listening on localhost:8000
    location ~ .php$ {
        fastcgi_split_path_info ^(. .php)(/. )$;
        fastcgi_pass localhost:8000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}
  

Однако, когда я просматриваю usa.mydomain.com Я получаю

403 Forbidden nginx / 1.14.0 (Ubuntu)

Как я могу исправить эту ошибку?

Я изменил Nginx на следующую конфигурацию

 server {
    listen 80;
    server_name usa.mydomin.com;

    #root /var/www/html; # <<<<< REMOVED THIS
    root /data/wordpress_app/public_html; # <<<<< ADDED THIS

    access_log off;
    error_log /var/log/nginx/usa.mydomain.com-error.log;

    index index.html index.php;

    location / {
    # First attempt to serve request as file, then as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.php?$args;
    }

    # pass the PHP scripts to FastCGI server listening on localhost:8000
    location ~ .php$ {
        fastcgi_split_path_info ^(. .php)(/. )$;
        fastcgi_pass localhost:8000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}
  

Но теперь я получаю

502 Плохой шлюз

просматривая журналы, я получаю следующую ошибку

 2020/10/16 15:22:58 [error] 1475#1475: *68 upstream sent unsupported FastCGI protocol version: 72 while reading response header from upstream, client: MyIpAddress, server: usa.mydomain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://[::1]:8000", host: "usa.mydomain.com"

2020/10/16 15:22:58 [error] 1475#1475: *68 upstream sent unsupported FastCGI protocol version: 72 while reading response header from upstream, client: MyIpAddress, server: usa.mydomain.com, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:8000", host: "usa.mydomain.com", referrer: "http://usa.mydomain.com/"
  

Как я могу исправить эту проблему?

Ответ №1:

После нескольких дней попыток приложение было исправлено с помощью следующих настроек. Я бы хотел, чтобы это сэкономило кому-то время

 server {
    listen 80;
    server_name usa.mydomain.com;

    root /data/wordpress_app/public_html;

    access_log off;

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

    index index.html index.php;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

    location / {

        try_files $uri $uri/ /index.php?$args;
        proxy_pass http://localhost:8000;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  

Ответ №2:

Моя конкретная проблема: я получал 403 только для ресурсов плагина SearchWP после установки плагина SearchWP через composer. Я использую Docksal для локальной разработки WordPress на основе docker.

Решение:

  1. Открыл оболочку в контейнере сервиса и перешел в каталог плагинов и проверил разрешения. Связанные команды: fin bash и ls -la
  2. Использовался chmod -R 755 searchwp для исправления разрешения целевого каталога, и это решило проблему.

Надеюсь, это может кому-то помочь.

Спасибо