• Как заранее определить подсеть VPS серверов?

    grabbee
    @grabbee
    Bright144, копайте в сторону IPv6... Я не в теме, но кажется возможно настроить сервер на работу по IPv6 для себя. Провайдеры выдают IPv6 блоками бесплатно или за символическую плату
  • Какие есть сервисы кэширования для сайта?

    grabbee
    @grabbee Автор вопроса
    Román Mirilaczvili, что именно? то что мне нужно отдать квартиру за подписку на платную версию?
  • Какие есть сервисы кэширования для сайта?

    grabbee
    @grabbee Автор вопроса
    проверил, proxy_cache_purge в free версии нет, доступна как часть коммерческой подписки

    тогда в чем смысл ответа, если об этом написано в вопросе?
    Но из NGINX выпилили возможность удаления записей по BAN запросу, а мне очень нужно это
  • Какие есть сервисы кэширования для сайта?

    grabbee
    @grabbee Автор вопроса
    MaxKozlov, Функциональность доступна как часть коммерческой подписки.
  • Как понять что просходит с заголовками в NGINX при проксировании?

    grabbee
    @grabbee Автор вопроса
    Я провел несколько тестов с использованием дефолтных образов PHP + NGINX.
    1. Сделал хеловорд, который читает файл картинки с диска и выплевывает в браузер с заголовками через add header - работает как положено. Никаких минусов, заголовок Expires перекидывается через прокси как положено.
    <?php
    $file = 'image.png';
    header("Cache-Control: public");
    header('Date: '.gmdate('D, d M Y H:i:s \G\M\T', time()));
    header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 10));
    
    header("Content-Type: image/png");
        
    readfile($file);

    Просто попробуй, и это работает без каких либо особых настроек прокси

    В то же время этот код(аналогичный тому что выше) в симфони не работает, выдает "минус один".
    * @Cache(expires="+10 sec", public=true)
         */
        public function test2(): Response
        {
            $content = file_get_contents(__DIR__.'/image.png');
            $response = new Response($content);
            return $response;
        }


    Я пока думаю что это какой-то баг непосредственно в симфони
  • Каким образом симфони генерируе префикс для кэша?

    grabbee
    @grabbee Автор вопроса
    походу это
    return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$seed, true))), 0, 10);
  • Как понять что просходит с заголовками в NGINX при проксировании?

    grabbee
    @grabbee Автор вопроса
    Ошибка в самом приложении, способ отдачи контента из контроллера. Видимо неправильно использовать
    new Response($image->getContent() ...


    Нужно что-то добавить. Пока поищу что именно...
  • Как понять что просходит с заголовками в NGINX при проксировании?

    grabbee
    @grabbee Автор вопроса
    Andrey Shatokhin, сейчас вместо Симфони сделал просто пхп файл и выдал теже заголовки что и симфони, прокси NGINX работает нормально, и заголовок expires не затирается. Копаю дальше...
  • Как понять что просходит с заголовками в NGINX при проксировании?

    grabbee
    @grabbee Автор вопроса
    Andrey Shatokhin, я сейчас запустил дефолтный конфиг и публичный образ nginx в докере - тоже самое

    proxy-nginx:
        image: nginx:latest
        restart: always
        depends_on:
            - api-media
        volumes:
          - ../media:/app
          - ../media/docker/nginx/server.conf:/etc/nginx/conf.d/default.conf
        ports:
          - "8002:80"


    server.conf


    upstream backend {
    server api-media;
    }

    proxy_cache_path /tmp/nginx-cache
    levels=1:2
    keys_zone=CACHE_DEFAULT:15m
    inactive=7d
    max_size=100m;

    server {
    listen 80;
    server_name _;

    root /app/public;
    index index.php;

    location / {
    proxy_cache CACHE_DEFAULT;
    proxy_pass backend;
    }
    }
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    RequestedToCapacityRatio - сработало похоже.
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    сергей кузьмин, добавил пока это. Без особого понимания
    apiVersion: kubescheduler.config.k8s.io/v1beta3
    kind: KubeSchedulerConfiguration
    clientConnection:
      kubeconfig: "/etc/kubernetes/scheduler.conf"
    leaderElection:
      leaseDuration: 15s
      renewDeadline: 10s
    profiles:
    - pluginConfig:
        args:
          scoringStrategy:
            resources:
              name: cpu
              weight: 10
            type: RequestedToCapacityRatio <----
        name: NodeResourcesFit <----
      schedulerName: default-scheduler

    до этого там не было секции профилей вообще
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    сергей кузьмин, scale of a Deployment and its ReplicaSet - нет конечно, это про нагрузку на под. Мне нужно нагрузку на ноды балансировать. Это через шедулер и плагины
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    сергей кузьмин, так да. Я так и сделал. Это жеткая привязка. Ляжет нода, лягут и все сервисы. А аффинити не работает, ну положит он отмеченные поды туда, остальные сольются и он в итоге всё выровнял по количеству подов на нодах - так по дефолту в кубере сейчас. Ему на нагрузку и ресурсы плевать. В этом и было моё удивление. Нахрена я их везде прописал? Чтобы он по нодам по количеству подов раскладывал?...
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    сергей кузьмин, там нужно как то плагин шедулера настроить. Нашел конфиг в кубспрее, но хз как делать
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    через kubespray или helm это можно настроить?
  • Как кубернетес балансирует нагрузку по нодам?

    grabbee
    @grabbee Автор вопроса
    chupasaurus, через kubespray или helm это можно настроить?
  • Пропустят ли приложение знакомств для секса в гугл плэй?

    grabbee
    @grabbee Автор вопроса
    Не пытался. Мне в целом не очень происходящее там на верхах
  • Почему NGINX прокси игнорирует Expires?

    grabbee
    @grabbee Автор вопроса
    Lynn «Кофеман», может чего лишнего там найдете, сообщите :)
    Делалось частями под k8s чтобы можно было перезаписывать
    Сам запрос делается напрямую к сервису минуя ингресс

    nginx -T

    configuration file /etc/nginx/nginx.conf:
    user nginx;
    worker_processes auto;

    worker_rlimit_nofile 300000;

    pid /run/nginx.pid;

    error_log /dev/stdout info;

    events {
    worker_connections 10240;
    multi_accept on;
    }

    http {
    charset utf-8;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    fastcgi_buffers 16 256k;
    fastcgi_buffer_size 256k;

    keepalive_timeout 15;
    keepalive_requests 1000;

    # Время ответа клиенту
    send_timeout 10;
    # Время на чтение тела запроса от клиента
    client_body_timeout 30;
    client_max_body_size 16M;

    # Закрывать подключение тех клиентов, которые перестали отвечать.
    reset_timedout_connection on;

    types_hash_max_size 2048;

    server_names_hash_bucket_size 64;
    server_tokens off;
    # server_name_in_redirect off;

    default_type application/octet-stream;

    log_format main '$upstream_cache_status $request_time($upstream_response_time) $remote_addr - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" '
    'rt=$request_time ut="$upstream_response_time" '
    'cs=$upstream_cache_status';

    access_log /dev/stdout main;

    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #"msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 5;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types
    text/plain
    text/css
    text/javascript
    application/json
    application/javascript
    application/x-javascript
    text/xml
    application/xml
    application/xml+rss;

    include '/etc/nginx/sites-enabled/*';
    }

    # configuration file /etc/nginx/sites-enabled/server.conf:
    include backend;
    include cache_default;

    server {
    listen 80;
    server_name _;

    root /app/public;
    index index.php;

    include locations;
    }

    # configuration file /etc/nginx/backend:
    upstream backend {
    server api-photo;
    }

    # configuration file /etc/nginx/cache_default:

    proxy_cache_path /data/nginx/cache
    levels=1:2
    keys_zone=CACHE_DEFAULT:10m
    inactive=7d
    max_size=900m;

    # configuration file /etc/nginx/locations:
    location /media {
    include proxy_params;
    proxy_cache CACHE_DEFAULT;
    proxy_pass backend;

    proxy_cache_valid 200 1m;

    proxy_hide_header X-Cache;
    add_header X-Cache $upstream_cache_status;
    }

    location / {
    include proxy_params;
    proxy_no_cache 1;
    proxy_cache_bypass 1;
    proxy_pass backend;
    add_header X-NO-Cache true;
    }

    # configuration file /etc/nginx/proxy_params:

    include samples/proxy_cache_key;

    include samples/proxy_set_header;

    # proxy_pass_request_body off;

    include samples/proxy_ignore_headers;

    include samples/proxy_hide_header;

    include samples/proxy_cache_valid;

    include samples/proxy_buffering;

    include samples/proxy_cache_use_stale;

    # configuration file /etc/nginx/samples/proxy_cache_key:

    proxy_cache_key $uri$is_args$args;

    # configuration file /etc/nginx/samples/proxy_set_header:

    proxy_set_header Host $http_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;

    # configuration file /etc/nginx/samples/proxy_ignore_headers:

    proxy_ignore_headers
    # X-Accel-Expires
    # Expires
    # Cache-Control
    Set-Cookie;

    # configuration file /etc/nginx/samples/proxy_hide_header:

    proxy_hide_header set-cookie;

    # proxy_hide_header Authorization;

    # proxy_hide_header X-Accel-Expires;
    # proxy_hide_header Expires;
    # proxy_hide_header Cache-Control;
    # proxy_hide_header pragma;

    # configuration file /etc/nginx/samples/proxy_cache_valid:
    # proxy_cache_valid 200 7d;
    # proxy_cache_valid 302 7d;
    # proxy_cache_valid 404 5m;

    proxy_cache_valid 404 10s;
    proxy_cache_valid 500 502 503 5s;
    # configuration file /etc/nginx/samples/proxy_buffering:

    proxy_buffering on;
    proxy_buffers 16 4k;
    proxy_buffer_size 2k;

    # configuration file /etc/nginx/samples/proxy_cache_use_stale:

    proxy_cache_use_stale error timeout invalid_header updating
  • Как сделать перехват запроса микросервисом?

    grabbee
    @grabbee Автор вопроса
    tukreb,

    микросервисную архитектуру в единой приложение


    Вы уверены что правильно понимаете что такое микросервисы? Они и есть отдельные независимые машины(виртуально, поды/контейнеры если в k8s). Они и должны друг друга дергать. Как это делать через MQ я знаю, но хочу сделать проще - напрямую.

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

    Вероятно есть что-то готовое. В этом и весь вопрос. Я нашел только jenssegers/proxy но не уверен что оно именно то
  • Как сделать перехват запроса микросервисом?

    grabbee
    @grabbee Автор вопроса
    tukreb, микросервис фактически это отдельный сервер