Рейтинг:0

Используйте несколько серверных блоков в NGINX на одном хосте и одном порту

флаг be

Я хочу настроить сервер таким образом, чтобы корень сервера обслуживал некоторые статические файлы, которые в определенной конечной точке /nextcloud обслуживали nextcloud в том же домене.

Вот мой nginx.conf -

рабочие_процессы 8;

События {
    worker_connections 1024;
}

http {
    включить mime.types;
    default_type application/octet-stream;
    отправить файл включен;
    keepalive_timeout 65;

    сервер {
        слушать 80 http2;
        слушать [::]:80 http2;
        имя_сервера локальный хост;
        корень /srv/http/;
        место расположения / {
            индекс index.html index.php;
            try_files $uri $uri/ =404;
            включен автоиндекс;
        }
        error_page 500 502 503 504 /50x.html;
        местоположение = /50x.html {
            корень /usr/share/nginx/html;
        }
    }
    включить /etc/nginx/sites-enabled/*;
}

Вот мой /etc/nginx/sites-enabled/nextcloud.conf

восходящий php-обработчик {
    сервер unix:/run/nextcloud/nextcloud.sock;
}

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера nextcloud;

    корень /usr/share/webapps/;

    местоположение = /robots.txt {
        позволять все;
        log_not_found выключен;
        доступ_лог выключен;
    }

    расположение ^~ /.известный {
        location = /.well-known/carddav { return 301 /nextcloud/remote.php/dav/; }
        location = /.well-known/caldav { return 301 /nextcloud/remote.php/dav/; }

        location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation { try_files $uri $uri/ =404; }

        вернуть 301 /nextcloud/index.php$request_uri;
    }

    расположение ^~ /nextcloud {
        client_max_body_size 512M;
        client_body_timeout 300 с;
        fastcgi_buffers 64 4K;

        gzip включен;
        gzip_vary включен;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font- Приложение ttf/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

        add_header Referrer-Policy «без реферера» всегда;
        add_header X-Content-Type-Options «нюхать» всегда;
        add_header X-Download-Options «noopen» всегда;
        add_header X-Frame-Options «SAMEORIGIN» всегда;
        add_header X-Permitted-Cross-Domain-Policies «нет» всегда;
        add_header X-Robots-Tag «none» всегда;
        add_header X-XSS-Защита "1; режим = блок" всегда;

        fastcgi_hide_header X-Powered-By;

        индекс index.php index.html /nextcloud/index.php$request_uri;

        местоположение = /nextcloud {
            если ($http_user_agent ~ ^DavClnt) {
                вернуть 302 /nextcloud/remote.php/webdav/$is_args$args;
            }
        }

        location ~ ^/nextcloud/(?:build|тесты|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
        location ~ ^/nextcloud/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }

        расположение ~ \.php(?:$|/) {
            переписать ^/nextcloud/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-провайдер\/.+ |.+\/richdocumentscode\/proxy) /nextcloud/index.php$request_uri;

            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            установить $path_info $fastcgi_path_info;

            try_files $fastcgi_script_name = 404;

            включить fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $path_info;

            fastcgi_param modHeadersAvailable true; # Избегайте двойной отправки заголовков безопасности
            fastcgi_param front_controller_active true; # Включить красивые URL
            php-обработчик fastcgi_pass;

            fastcgi_intercept_errors включен;
            fastcgi_request_buffering выключен;

            fastcgi_max_temp_file_size 0;
        }

        расположение ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite)$ {
            try_files $uri /nextcloud/index.php$request_uri;
            истекает 6M; # Политика Cache-Control заимствована из `.htaccess`
            доступ_лог выключен; # Необязательно: не регистрировать доступ к ресурсам

            расположение ~ \.wasm$ {
                приложение по умолчанию_тип/wasm;
            }
        }

        расположение ~ \.woff2?$ {
            try_files $uri /nextcloud/index.php$request_uri;
            истекает 7 дней; # Политика Cache-Control заимствована из `.htaccess`
            доступ_лог выключен; # Необязательно: не регистрировать доступ к ресурсам
        }

        расположение /nextcloud/удаленный {
            вернуть 301 /nextcloud/remote.php$request_uri;
        }

        расположение /nextcloud {
            try_files $uri $uri/ /nextcloud/index.php$request_uri;
        }
    }
}

Проблема в том, что эта конфигурация не работает. С этой конфигурацией я получаю 404, когда пытаюсь получить доступ к /nextcloud/.

Если я отключу блок сервера статических файлов в nginx.conf, я смогу получить доступ к /nextcloud/, но тогда я не смогу получить доступ к своим статическим файлам. Как настроить так, чтобы оба работали на одном хосте и на одном порту?

Рейтинг:0
флаг us

Вам нужно настроить оба в том же сервер блокировать.

Когда nginx получает запрос, он выбирает виртуальный хост для использования на основе HTTP. Хозяин заголовок в запросе и номер порта.

Ваша текущая конфигурация будет служить Nextcloud если вы обращались к сервису с помощью http://nextcloud/следующее облако, при условии, что у вас правильно настроен DNS для Nextcloud имя.

Скорее всего, вам нужно что-то вроде этого в вашей конфигурации nginx:

рабочие_процессы 8;

События {
    worker_connections 1024;
}

http {
    включить mime.types;
    default_type application/octet-stream;
    отправить файл включен;
    keepalive_timeout 65;

    сервер {
        слушать 80 http2;
        слушать [::]:80 http2;
        имя_сервера локальный хост;
        корень /srv/http/;
        место расположения / {
            индекс index.html index.php;
            try_files $uri $uri/ =404;
            включен автоиндекс;
        }
        
        расположение /nextcloud {
            ...
        }

        error_page 500 502 503 504 /50x.html;
        местоположение = /50x.html {
            корень /usr/share/nginx/html;
        }
    }
    включить /etc/nginx/sites-enabled/*;
}

И удаление другой конфигурации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.