Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Помогите исправить не простой конфиг NGINX (http://forum.oszone.net/showthread.php?t=356159)

Mancoffee 25-02-2025 20:55 3036236

Помогите исправить не простой конфиг NGINX
 
Конфиг

Код:

## HTTP redirect
server {
    listen                      80;
    server_name                domain.com;

    ## logging
    access_log                  /var/log/nginx/access_http.log cloudflare buffer=512k flush=1m;
    error_log                  /var/log/nginx/error_http.log warn;

    location / {
        return      301        https://$host$request_uri;
    }
}

server {
    listen          443        ssl http2;
    server_name                domain.com;
    root                        /var/www/html/domain.com;
    index                      index.html;
    client_max_body_size        1024M;
    client_body_temp_path      /var/tmp/nginx-client-body 1;
    # include                    nginxconfig.io/letsencrypt.conf;
    more_set_headers            "Server: Apache/2.4.10 (Arch)";
    set                        $nginxerrors /usr/share/nginx/html;
    include                    /etc/nginx/errordocs_default.inc;

    autoindex                  off;

    ## SSL
    ssl_certificate            /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key        /etc/letsencrypt/live/domain.com/privkey.pem;
    ssl_trusted_certificate    /etc/letsencrypt/live/domain.com/chain.pem;

    ssl_protocols              TLSv1.2 TLSv1.3;

    ## openssl dhparam -out /etc/nginx/dhparam.pem 2048
    ssl_dhparam                /etc/nginx/dhparam.pem;

    ## security headers
    add_header                  X-Frame-Options "DENY" always;
    add_header                  X-Robots-Tag "noindex, nofollow" always;
    add_header                  X-XSS-Protection "1; mode=block" always;
    add_header                  X-Content-Type-Options "nosniff" always;
    add_header                  Cross-Origin-Embedder-Policy "require-corp" always;
    add_header                  Cross-Origin-Opener-Policy "same-origin" always;
    add_header                  Cross-Origin-Resource-Policy cross-origin always;
    # add_header                  Cross-Origin-Resource-Policy "same-origin" always;
    add_header                  Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header                  Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=(), fullscreen=(self)" always;
    add_header                  Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header                  Content-Security-Policy "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;


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

    # logging
    access_log                  /var/log/nginx/access_https.log cloudflare buffer=512k flush=1m;
    error_log                  /var/log/nginx/error_https.log warn;

    ## Reverse proxy с try_files
    location / {
        try_files              $uri $uri/ =404;

        add_header              X-Frame-Options "DENY" always;
        add_header              X-Robots-Tag "noindex, nofollow" always;
        add_header              X-XSS-Protection "1; mode=block" always;
        add_header              X-Content-Type-Options "nosniff" always;
        add_header              Cross-Origin-Embedder-Policy "require-corp" always;
        add_header              Cross-Origin-Opener-Policy "same-origin" always;
        add_header              Cross-Origin-Resource-Policy cross-origin always;
        # add_header              Cross-Origin-Resource-Policy "same-origin" always;
        add_header              Referrer-Policy "strict-origin-when-cross-origin" always;
        add_header              Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=(), fullscreen=(self)" always;
        add_header              Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
        add_header              Content-Security-Policy "default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;

        fastcgi_param          REQUEST_URI $request_uri;
        proxy_set_header        Host $host;
        add_header              Cache-Control "max-age=0, no-cache, no-store, must-revalidate";
        add_header              Pragma "no-cache";
        add_header              Expires "0";

        proxy_http_version      1.1;
        proxy_cache_bypass      $http_upgrade;

        ## Proxy SSL
        proxy_ssl_server_name  on;

        ## Proxy headers
        proxy_set_header        Upgrade          $http_upgrade;
        proxy_set_header        Connection        $connection_upgrade;
        proxy_set_header        X-Real-IP        $remote_addr;
        proxy_set_header        Forwarded        $proxy_add_forwarded;
        proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
        proxy_set_header        X-Forwarded-Host  $host;
        proxy_set_header        X-Forwarded-Port  $server_port;

        ## Proxy timeouts
        proxy_connect_timeout  30s;
        proxy_send_timeout      30s;
        proxy_read_timeout      30s;
        ## include                nginxconfig.io/proxy.conf;
    }

    ## Обработка 404 для миниатюр (если файла нет, отдаём заглушку)
    location ~ ^/thumb_ {
        root                    /var/www/html/domain.com/img/i/;
        try_files  $uri        /res/imgs/errors/404_thumb.png;
    }
    ## Обработка 404 для изображений (если файла нет, отдаём заглушку)
    location ~ ^/[^/]+\.(jpg|jpeg|jpe|jif|jfif|png|bmp|gif|tiff|tif|webp|heic|heif|avif|svg|ico)$ {
        root                    /var/www/html/domain.com/img/i;
        try_files  $uri        /res/imgs/errors/404_fallback.png;
    }
    ## Путь к заглушкам 404
    location = /res/imgs/errors/404_fallback.png {
        root                    /var/www/html/domain.com;
    }
    location = /res/imgs/errors/404_thumb.png {
        root                    /var/www/html/domain.com;
    }

    location = /res/imgs/favicon.ico {
        root                    /var/www/html/domain.com;
        log_not_found          off;
        access_log              off;
        return                  204;
    }

    location ~ ^/(?!index\.html)[^/]+$ {
        root                    /var/www/html/domain.com/file/f;
    }
    ## Файлы, не относящиеся к изображениям (редирект из /file/f/)
    location ~ ^/file/f(/[^/]+)$ {
        return        301      $1;
    }
    ## Основные файлы изображений (редирект, если путь не содержит img/i/)
    location ~ ^/img/i(/[^/]+\.(jpg|jpeg|jpe|jif|jfif|png|bmp|gif|tiff|tif|webp|heic|heif|avif|svg|ico))$ {
        return        301      https://$host$1;
    }

    ## Обработка PHP
    location ~ \.php$ {
        include                snippets/fastcgi-php.conf;
        fastcgi_pass            unix:/run/php/php-fpm.sock;
        fastcgi_param          SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param          PHP_ADMIN_VALUE "error_log=/var/log/php/errors-domain.com.log";
        ## fastcgi_param          HTTP_AUTHORIZATION $http_authorization;
        include                fastcgi_params;
    }
    location ^~ /res/imgs/ {
        root /var/www/html/domain.com;
        log_not_found off;
    }
    location ^~ /res/css/ {
        root /var/www/html/domain.com;
        log_not_found off;
    }

    location ~* \.(jpg|jpeg|jpe|jif|jfif|png|bmp|gif|tiff|tif|webp|heic|heif|avif|svg|ico)$ {
        root /var/www/html/domain.com/img/i;
        try_files    $uri      =404;

        add_header              Access-Control-Allow-Origin "*" always;
        add_header              Access-Control-Allow-Methods "GET, OPTIONS" always;
        add_header              Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" always;
        add_header              Access-Control-Expose-Headers "Content-Length,Content-Range" always;

        ## Разрешить загрузку изображений с других сайтов
        add_header              Cross-Origin-Resource-Policy "cross-origin" always;
    }
    location = /res/imgs/php_out_error.png {
        log_not_found          off;
    }
    location = /res/imgs/errors/favicon_error.png {
        log_not_found          off;
    }
    location = /robots.txt {
        log_not_found          off;
    }

    # include                    nginxconfig.io/general.conf;
}



Условия:
Нужно чтобы все файлы отсюда /var/www/html/domain.com/file/f/
Все изображения отсюда /var/www/html/domain.com/img/i/ и отсюда /var/www/html/domain.com/img/i/fd/ редиректились в корень домена.
В этих каталогах всегда только изображения.
Так же из этих каталогов они должны быть доступны по прямым ссылкам от корня. Например domain.com/Diya.png, которое находится в /var/www/html/domain.com/img/i/fd/
Ещё в /var/www/html/domain.com/img/i/ есть файлы миниатюр, которые всегда начинаются с thumb_[рандомные 16 знаков.[расширение]. На них есть редиректы для заглушек, если файлы не существуют.

Сейчас файлы /var/www/html/domain.com/file/f/ и изображения с миниатюрами отсюда /var/www/html/domain.com/img/i/ редиректятся правильно и заглушки от миниатюр тоже, а отсюда /var/www/html/domain.com/img/i/fd по запросу пример: domain.com/img/i/fd/Gemini.png выдают страницу ошибки 404, отсюда domain.com/Gemini.png заглушку 404 (404_fallback.png).
Помогите найти ошибку.

Sham 05-03-2025 10:55 3036440

Цитата:

Цитата Mancoffee
location ~ ^/img/i(/[^/]+\. »

регулярка не учитывает /fd. Видимо должно быть типа этого ^/img/i(?:/fd)?(/[^/]+\.


Время: 04:48.

Время: 04:48.
© OSzone.net 2001-