Гитлаб СЕ | 404 Конкретные файлы | Из-за блока местоположения nginx (даже без содержимого / операторов) - PullRequest
0 голосов
/ 18 мая 2019

Нашел причину, но не понимаю почему?!

Я нашел причину этой проблемы, это блок местоположения, но я не понимаю или не понимаю почему. Это просто обычный блок лакирования и шаблон, который можно найти в global/restrictions.conf:

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
       access_log off;
       log_not_found off;
       expires max;
}

Интересная часть - : то, что не отфильтрованные файлы выдают свойства 404. Это сам блок размещения:

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {}


Кто-нибудь знает, как такой блок локации может бросить 404 с?

Я имею в виду, этот блок даже не имеет операторов и вызвал проблему.

Было бы неплохо, если бы кто-то сделал меня умнее.


Первый выпуск

Проблема (до того, как вы обнаружите, что вы можете прочитать здесь)

Получите 404 при попытке получить доступ к изображениям хранилища на Gitlab (в браузере).

Я выдвигал это раньше и хотел знать, все ли есть, и даже RAW работает. Но когда дело доходит до изображений, я просто получаю ответ 404 для таких URL: https://git.example.tld/yyy/editor/raw/master/data/images/logo.png

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

Что может вызвать эту проблему?

Я просмотрел лог-файлы github-rails и github-workhorse, чтобы найти сообщение об ошибке. Но ожидайте, что они получат 404, больше ничего не увольняют.

Что я сделал?

Я установил Gitlab CE (v11.10.4) на Debian 9.9 (растяжение) , где также был уже установлен nginx (последний) . Установка была произведена через apt и настроена так, как вы можете видеть в деталях этой части.

Issue-История:

  1. Переменная-проблема в nginx-конфигурации (решена)

    Исправлено путем замены proxy_set_header Upgrade $http_upgrade; на proxy_set_header Connection "upgrade";.

  2. Получил только 404. При посещении страницы. (решено)

    Исправлено после комментирования последней части nginx-конфигурации и помещения root в родительскую область.

  3. Нет CSS для FontIcons (решено)

    Исправлено после комментария proxy_set_header Connection "upgrade";

  4. Загрузка аватара не показана (решено)

    Загрузка работает, файл был на правильном пути машины. Нашел эту проблему и решил ее. Но gitlab-rake gitlab:app:check обвинил меня впоследствии и представил меня с новыми командами изменения разрешения. Но все же с тех пор это просто работает. Даже после очистки gitlab: кешировать, перенастроить и перезапустить.

  5. Текущая проблема, которую вы открыли в StackExchange (не решена)

Подробнее

Выход: gitlab-rake gitlab:app:check

Checking GitLab App ...

Git configured correctly? ... yes
Database config exists? ... yes
All migrations up? ... yes
Database contains orphaned GroupMembers? ... no
GitLab config exists? ... yes
GitLab config up to date? ... yes
Log directory writable? ... yes
Tmp directory writable? ... yes
Uploads directory exists? ... yes
Uploads directory has correct permissions? ... yes
Uploads directory tmp has correct permissions? ... yes
Init script exists? ... skipped (omnibus-gitlab has no init script)
Init script up-to-date? ... skipped (omnibus-gitlab has no init script)
Projects have namespace: ...
xxx / test ... yes
yyy / editor ... yes
Redis version >= 2.8.0? ... yes
Ruby version >= 2.5.3 ? ... yes (2.5.3)
Git version >= 2.18.0 ? ... yes (2.18.1)
Git user has default SSH configuration? ... yes
Active users: ... 1

Checking GitLab App ... Finished

Отфильтрованный вывод: top

  307 www-data  20   0  513156  40256  26804 S   0,0  0,7   0:30.73 php-fpm7.1
  413 www-data  20   0  513140  40688  27252 S   0,0  0,7   0:28.48 php-fpm7.1
11135 www-data  20   0  513092  40084  26676 S   0,0  0,7   0:04.41 php-fpm7.1
13560 gitlab-+  20   0  423008  17964  11820 S   0,0  0,3   0:00.35 alertmanager
13576 git       20   0  387328  12172   8776 S   0,0  0,2   0:00.05 gitaly-wrapper
13582 git       20   0  642608  34836  15232 S   0,0  0,6   0:00.99 gitaly
13598 git       20   0  449980  33260   8140 S   0,0  0,5   0:08.78 gitlab-mon
13600 git       20   0 1290172  63492  14852 S   0,0  1,0   0:02.20 ruby
13603 git       20   0 1300416  63924  14844 S   0,0  1,0   0:02.19 ruby
13610 git       20   0  414056  21572  13616 S   0,0  0,4   0:00.12 gitlab-workhors
13628 root      20   0    4276    756    688 S   0,0  0,0   0:00.00 gitlab-logrotat
13634 gitlab-+  20   0  114272  15040   8976 S   0,0  0,2   0:00.30 node_exporter
13640 gitlab-+  20   0  243644  14928   9088 S   0,0  0,2   0:00.26 postgres_export
13725 gitlab-+  20   0 1629984  66220  64368 S   0,0  1,1   0:00.11 postgres
13729 gitlab-+  20   0 1630120   4092   2240 S   0,0  0,1   0:00.00 postgres
13730 gitlab-+  20   0 1629984  15692  13836 S   0,0  0,3   0:00.05 postgres
13731 gitlab-+  20   0 1630120   4092   2240 S   0,0  0,1   0:00.00 postgres
13732 gitlab-+  20   0 1630532   7180   5104 S   0,0  0,1   0:00.00 postgres
13733 gitlab-+  20   0   33136   4916   2944 S   0,0  0,1   0:00.05 postgres
13736 gitlab-+  20   0  704836 171360  29448 S   0,0  2,8   0:05.83 prometheus
13747 gitlab-+  20   0   41460   5944   2720 S   0,0  0,1   0:01.80 redis-server
13751 gitlab-+  20   0  254264  13716   7444 S   0,0  0,2   0:00.18 redis_exporter
13759 git       20   0  967164 440912  18244 S   0,0  7,2   0:27.27 bundle
13772 git       20   0   18100   3000   2568 S   0,0  0,0   0:00.15 gitlab-unicorn-
13790 git       20   0  704956 416880  16824 S   0,0  6,8   0:23.84 bundle
13796 gitlab-+  20   0 1641188  25504  21076 S   0,0  0,4   0:00.25 postgres
13797 gitlab-+  20   0 1639636  21296  17984 S   0,0  0,3   0:00.10 postgres
13798 gitlab-+  20   0 1640376  23264  19936 S   0,0  0,4   0:00.16 postgres
13799 gitlab-+  20   0 1640088  22644  19012 S   0,0  0,4   0:00.25 postgres
13868 git       20   0  861932 426076  13332 S   0,0  7,0   0:01.80 bundle
13871 git       20   0  864092 424720  15004 S   0,0  6,9   0:02.88 bundle
13874 git       20   0  864348 421884  15052 S   0,0  6,9   0:02.71 bundle
13883 gitlab-+  20   0 1641836  28584  23760 S   0,0  0,5   0:00.12 postgres
13931 gitlab-+  20   0 1641568  25860  21784 S   0,0  0,4   0:00.06 postgres
14040 gitlab-+  20   0 1641548  27436  22908 S   0,0  0,4   0:00.10 postgres
14399 gitlab-+  20   0 1640044  23452  19968 S   0,0  0,4   0:00.01 postgres
14823 gitlab-+  20   0 1640084  20868  17608 S   0,0  0,3   0:00.01 postgres
14871 git       20   0    4184    648    588 S   0,0  0,0   0:00.00 sleep
16004 root      20   0  161400   2544     52 S   0,0  0,0   0:00.00 nginx
16005 www-data  20   0  161944   8744   5428 S   0,0  0,1   0:03.45 nginx
16006 www-data  20   0  161884   8484   5412 S   0,0  0,1   0:01.63 nginx
16851 mysql     20   0 1932868 123616  19356 S   0,0  2,0   2:06.78 mysqld
20095 root      20   0  508136  53216  44844 S   0,0  0,9   0:39.46 php-fpm7.1

Конфигурация

Файл: passwd (только соответствующие части)

git               : x : 1000 : 1000 : ,,,      : /var/opt/gitlab            : /bin/sh
gitlab-www        : x : 999  : 998  :          : /var/opt/gitlab/nginx      : /bin/false
gitlab-redis      : x : 998  : 997  :          : /var/opt/gitlab/redis      : /bin/false
gitlab-psql       : x : 997  : 996  :          : /var/opt/gitlab/postgresql : /bin/sh
gitlab-prometheus : x : 996  : 995  :          : /var/opt/gitlab/prometheus : /bin/sh
www-data          : x : 33   : 33   : www-data : /var/www                   : /usr/sbin/nologin

Конфигурация Gitlab: gitlab.rb

### GitLab configuration settings
external_url 'https://git.example.tld'
nginx['enable'] = false
web_server['external_users'] = ['www-data']
gitlab_rails['gitlab_default_projects_features_builds'] = false

Конфигурация Nginx VHost: gitlab.conf

upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}

server {
        listen          80;
        server_name    git.exmaple.tld;
        location ~ .well-known/acme-challenge/ {
          root /var/www/letsencrypt;
          default_type text/plain;
        }

    location / {
        return 301 https://git.exmaple.tld$request_uri;
    }
}

server {
        listen          443 ssl http2;
        listen          [::]:443 ssl http2;
        server_name     git.exmaple.tld;
        access_log      /var/log/gitlab_access.log;
        error_log       /var/log/gitlab_error.log warn;

        root /opt/gitlab/embedded/service/gitlab-rails/public;

        ssl                     on;
        ssl_certificate         /etc/letsencrypt/live/git.exmaple.tld/fullchain.pem; # managed by Certbot
        ssl_certificate_key     /etc/letsencrypt/live/git.exmaple.tld/privkey.pem; # managed by Certbot

        # include                 global/secure_ssl.conf; # CHANGED: Unknown File
        include                 global/restrictions.conf;
        client_max_body_size    250M;
        index                   index.php;

        # Additional rules go here.

        location / {
          client_max_body_size 0;
          ## If you use HTTPS make sure you disable gzip compression
          ## to be safe against BREACH attack.

          ## https://github.com/gitlabhq/gitlabhq/issues/694
          ## Some requests take more than 30 seconds.
          proxy_read_timeout      3600;
          proxy_connect_timeout   300;
          proxy_redirect          off;
          proxy_http_version 1.1;

          proxy_set_header Host $http_host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-Ssl on;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          # proxy_set_header Upgrade $http_upgrade;
          # proxy_set_header Connection "upgrade";
          proxy_set_header X-Forwarded-Proto https;

          proxy_pass http://gitlab-workhorse;
        }

        error_page 404 /404.html;
        error_page 422 /422.html;
        error_page 500 /500.html;
        error_page 502 /502.html;

        # CHANGE: Comment out because run everytimes into 404.
            # Copied root parameter into parent configuration-scope.
              # 
              # location ~ ^/(404|422|500|502)(-custom)?\.html$ {
        #   root /opt/gitlab/embedded/service/gitlab-rails/public;
        #   internal;
        # }
}

Обновлено (2019-05-21)

Конфигурация ограничения Nginx:

# # Bad referrer 404 filer
# if ($bad_referer) {
#     return 444;
# }

# Global restrictions configuration file.
# Designed to be included in any server {} block.
location = /favicon.ico {
    log_not_found off;
    access_log off;
}

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


# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~ /\. {
    deny all;
}

# Deny access to any files with a .php extension in the uploads directory
# Works in sub-directory installs and also in multisite network
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
       access_log off;
       log_not_found off;
       expires max;
}
...