Рейтинг:0

nginx не будет передавать изображения через https (403 Forbidden)

флаг cn

Я был озадачен этой проблемой в течение нескольких месяцев. Мой сайт нормально загружается по http, но когда он использует https, не загружаются только изображения. Я вижу эту ошибку в консоли.

Не удалось загрузить ресурс: сервер ответил со статусом 403 (Запрещено) /images/:1

Конфигурация моего сервера выглядит так.

www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

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

http {
    ##
    # Основные настройки
    ##

    отправить файл включен;
    tcp_nopush включен;
    tcp_nodelay включен;
    keepalive_timeout 65;
    типы_хэш_макс_размер 2048;
    #server_tokens отключены;

    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Настройки SSL
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Удаление SSLv3, ссылка: POODLE
    ssl_prefer_server_ciphers включен;

    ##
    # Настройки ведения журнала
    ##

    журнал_доступа /var/log/nginx/access.log;
    журнал_ошибок /var/log/nginx/error.log;

    ##
    # Настройки Gzip
    ##

    gzip включен;

    ##
    # Конфигурации виртуального хоста
    ##

    включить /etc/nginx/conf.d/*.conf;
    включить /etc/nginx/sites-enables/*;
    индекс index.html;

    сервер {
        имя_сервера example.com www.example.com;

        root /home/client/example/public/;

        #под управлением Certbot
        слушать 443 ssl;
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        включить /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        место расположения / {
            индекс index.html;
        }
    }
}

В error.log клиент имеет мой домашний IP-адрес вместо IP-адреса сервера, и я не могу понять, почему.

Редактировать: это потому, что клиент - мой домашний адрес (дух)

21.01.2022 19:10:50 [ошибка] 2383993#2383993: *354409 индекс каталога "/home/client/example/public/images/" запрещен, клиент: WRONG.IP.ADDRESS.HERE, сервер: example.com, запрос: "GET /images/ HTTP1.1", хост: "example.com", реферер: "https://example.com/images/"

Как я могу это решить? Я ценю вашу помощь.

Изменить: вот полный вывод nginx -T

# файл конфигурации /etc/nginx/nginx.conf:
www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

События {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Основные настройки
    ##
    
    отправить файл включен;
    tcp_nopush включен;
    tcp_nodelay включен;
    keepalive_timeout 65;
    типы_хэш_макс_размер 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Настройки SSL
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Удаление SSLv3, ссылка: POODLE
    ssl_prefer_server_ciphers включен;

    ##
    # Настройки ведения журнала
    ##

    журнал_доступа /var/log/nginx/access.log;
    журнал_ошибок /var/log/nginx/error.log;

    ##
    # Настройки Gzip
    ##

    gzip включен;

    # gzip_vary on;
    # gzip_proxyed любой;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Конфигурации виртуального хоста
    ##

    включить /etc/nginx/conf.d/*.conf;
    включить /etc/nginx/sites-enabled/*;
    индекс index.html;

    #нужен ли этот серверный блок?
    #этот сайт работает через pm2
  сервер {
    имя_сервера example.com www.example.com;

    корень /home/client/example/public/;


    слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

        место расположения / {
            #root /home/client/example/public/;
            индекс index.html;
            включен автоиндекс;
        }
    }
}


#почта {
# # См. пример сценария аутентификации по адресу:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# сервер {
# слушать localhost:110;
# протокол pop3;
# прокси включен;
# }
#
# сервер {
# слушать localhost:143;
# протокол imap;
# прокси включен;
# }
#}

# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-image-filter.conf:
модули загрузки_модуля/ngx_http_image_filter_module.so;

# файл конфигурации /etc/nginx/modules-enabled/50-mod-http-xslt-filter.conf:
модули load_module/ngx_http_xslt_filter_module.so;

# файл конфигурации /etc/nginx/modules-enabled/50-mod-mail.conf:
модули load_module/ngx_mail_module.so;

# файл конфигурации /etc/nginx/modules-enabled/50-mod-stream.conf:
модули load_module/ngx_stream_module.so;

# файл конфигурации /etc/nginx/mime.types:

типы {
    текст/html html htm shtml;
    текст/CSS CSS;
    текст/xml xml;
    изображение/gif gif;
    изображение/jpeg jpeg jpg;
    приложение/javascript js;
    приложение/атом+xml атом;
    приложение/rss+xml rss;

    текст/математика ммл;
    текст/простой текст;
    текст/vnd.sun.j2me.app-дескриптор jad;
    текст/vnd.wap.wml wml;
    текст/x-компонент htc;

    изображение/png png;
    изображение/tiff tif tiff;
    изображение/vnd.wap.wbmp wbmp;
    изображение/значок x ico;
    изображение/x-jng jng;
    изображение/x-ms-bmp bmp;
    изображение/svg+xml svg svgz;
    изображение/веб-сайт;

    приложение/шрифт-woff woff;
    приложение/java-архив jar war ear;
    приложение/json json;
    приложение/mac-binhex40 hqx;
    документ приложения/msword;
    заявка/pdf pdf;
    приложение/постскриптум ps eps ai;
    приложение/rtf rtf;
    приложение /vnd.apple.mpegurl m3u8;
    приложение/vnd.ms-excel xls;
    приложение /vnd.ms-fontobject eot;
    приложение /vnd.ms-powerpoint ppt;
    приложение /vnd.wap.wmlc wmlc;
    application/vnd.google-earth.kml+xml кмл;
    application/vnd.google-earth.kmz кмз;
    приложение /x-7z-сжатый 7z;
    приложение /x-cocoa cco;
    приложение/x-java-архив-diff jardiff;
    приложение/x-java-jnlp-файл jnlp;
    запуск приложения /x-makeself;
    приложение/x-perl pl pm;
    приложение/x-pilot prc pdb;
    приложение /x-rar-сжатый rar;
    application/x-redhat-package-manager об/мин;
    приложение /х-море море;
    приложение /x-shockwave-flash swf;
    приложение /x-stuffit сидеть;
    приложение/x-tcl tcl tk;
    application/x-x509-ca-cert der pem crt;
    приложение /x-xpinstall xpi;
    приложение/xhtml+xml xhtml;
    приложение/xspf+xml xspf;
    приложение/zip-архив;

    приложение/октет-поток bin exe dll;
    приложение/октетный поток deb;
    приложение/октет-поток dmg;
    приложение/октетный поток iso img;
    приложение/октет-поток msi msp msm;

    приложение/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
    приложение/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
    приложение/vnd.openxmlformats-officedocument.presentationml.presentation pptx;

    аудио/миди мид миди кар;
    аудио/мпег мп3;
    аудио/огг огг;
    аудио/x-m4a m4a;
    аудио/x-realaudio ra;

    видео/3gpp 3gpp 3gp;
    видео/mp2t ц;
    видео/mp4 mp4;
    видео/mpeg mpeg mpeg mpg;
    видео/быстрое перемещение;
    видео/вебм вебм;
    видео/x-flv flv;
    видео/x-m4v m4v;
    видео/x-мнг мнг;
    видео/x-ms-asf asx asf;
    видео/x-ms-wmv wmv;
    видео/x-msvideo avi;
}

# файл конфигурации /etc/nginx/sites-enabled/default:
##
# Вам следует просмотреть следующие URL-адреса, чтобы получить четкое представление
# файлов конфигурации Nginx, чтобы полностью раскрыть всю мощь Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удалят этот файл с сайтов с поддержкой/ и
# оставить его как ссылку на доступных сайтах, где он и дальше будет
# обновлено командой упаковки nginx.
#
# Этот файл будет автоматически загружать файлы конфигурации, предоставленные другими
# приложения, такие как Drupal или Wordpress. Эти приложения будут сделаны
# доступен по пути с этим именем пакета, например /drupal8.
#
# Более подробные примеры см. в /usr/share/doc/nginx-doc/examples/.
##

# Конфигурация сервера по умолчанию
#
сервер {
    слушать 80 default_server;
    слушать [::]:80 default_server;

    # конфигурация SSL
    #
    # слушать 443 ssl default_server;
    # слушать [::]:443 ssl default_server;
    #
    # Примечание. Вы должны отключить gzip для трафика SSL.
    # См.: https://bugs.debian.org/773332
    #
    # Прочтите ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
    # См.: https://bugs.debian.org/765782
    #
    # Самоподписанные сертификаты, созданные пакетом ssl-cert
    # Не используйте их на рабочем сервере!
    #
    # включить фрагменты/snakeoil.conf;

    корень /var/www/html;

    # Добавьте index.php в список, если вы используете PHP
    индекс index.php index.html index.htm index.nginx-debian.html;

    имя_сервера example.com www.example.com ;

    место расположения / {
        # Сначала пытаемся обслужить запрос как файл, затем
        # в качестве каталога, затем вернуться к отображению 404.
        #try_files $uri $uri/ =404;
            proxy_pass http://localhost:3000; #независимо от порта, на котором работает ваше приложение
            #proxy_connect_timeout 60 сек.;
                #proxy_read_timeout 5400 с;
                #proxy_send_timeout 5400 с;
                #proxy_set_header хост $host;
                #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #proxy_set_header X-Real-IP $remote_addr;
                ##proxy_redirect по умолчанию;
        прокси_http_версия 1.1;
            proxy_set_header Обновить $http_upgrade;
            proxy_set_header Соединение «обновление»;
            proxy_set_header Хост $host;
            proxy_cache_bypass $http_upgrade;
    }

    # передать PHP-скрипты на сервер FastCGI
    #
    расположение ~ \.php$ {
        включить фрагменты/fastcgi-php.conf;

    # # С php-fpm (или другими сокетами unix):
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    # # С php-cgi (или другими сокетами tcp):
    # fastcgi_pass 127.0.0.1:9000;
    }
}



# Конфигурация виртуального хоста для example.com
#
# Вы можете переместить это в другой файл в разделе sites-available/ и указать символическую ссылку, которая
# на site-enabled/, чтобы включить его.
#
# сервер {
# слушать 80;
# слушать [::]:80;
#
# имя_сервера example.com;
#
# корень /var/www/example.com;
# индекс index.html;
#
#   место расположения / {
# try_files $uri $uri/ =404;
# }
#}

# файл конфигурации /etc/nginx/snippets/fastcgi-php.conf:
# регулярное выражение для разделения $uri на $fastcgi_script_name и $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# Проверяем существование PHP-скрипта перед его передачей
try_files $fastcgi_script_name = 404;

# Обойти тот факт, что try_files сбрасывает $fastcgi_path_info
# см.: http://trac.nginx.org/nginx/ticket/321
установить $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;
включить fastcgi.conf;

# файл конфигурации /etc/nginx/fastcgi.conf:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $схема;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param ИМЯ_СЕРВЕРА $server_name;

# Только PHP, требуется, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

# файл конфигурации /etc/letsencrypt/options-ssl-nginx.conf:
# Этот файл содержит важные параметры безопасности. Если вы измените этот файл
# вручную, Certbot не сможет автоматически обеспечивать безопасность в будущем
# обновления. Вместо этого Certbot напечатает и зарегистрирует сообщение об ошибке с указанием пути к
# актуальный файл, на который вам нужно будет ссылаться при ручном обновлении
# этот файл.

общий ssl_session_cache: le_nginx_SSL: 10 м;
ssl_session_timeout 1440 м;
ssl_session_tickets выключен;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers выключен;

ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";

# файл конфигурации /etc/nginx/fastcgi_params:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $схема;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param ИМЯ_СЕРВЕРА $server_name;

# Только PHP, требуется, если PHP был собран с --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
флаг us
Что именно вы пытаетесь запросить? Одно отдельное изображение или список всех изображений в каталоге? Если вы хотите, чтобы nginx показывал вам список всех файлов, вам нужно указать это с помощью `autoindex on;`. И в журнале может быть ваш домашний IP-адрес, потому что он регистрирует IP-адрес, с которого пришел запрос. Поэтому, если вы делаете запрос из своего дома, исходным IP-адресом является ваш домашний IP-адрес. И это то, что регистрируется.
флаг cn
Я включил автоиндекс; но теперь он ищет изображения не в той папке и выдает 404, в то время как http все еще работает нормально...
флаг in
Пожалуйста, также покажите блок сервера для http, чтобы мы могли увидеть, где он настроен по-другому.
флаг cn
Вот и все серверные блоки в nginx.conf
флаг us
Пожалуйста, добавьте вывод `nginx -T` к вопросу, чтобы мы могли увидеть полную конфигурацию nginx.
флаг cn
Хорошо, я добавил это к вопросу. Просто из любопытства, где эта опция -T упоминается в документах? Спасибо.
Рейтинг:0
флаг cn

При новой установке Linux я настраиваю сервер таким же образом, но использую более новый сертификат CertBot и установку, которая автоматически настраивает для меня Nginx SSL. https://certbot.eff.org/instructions

Кажется, это работает на данный момент. Обновлю, если у меня возникнут еще проблемы.

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

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