LINUX.ORG.RU

Сообщения commetaR37

 

NVMe адаптер

Есть мысль взбодрить веб сервер, поставить 2x512 Samsung 970 Pro. Шасси древнее: HP ProLiant DL360 G7, там вроде как 2 PCI-e слота: 16x и 8x, в одном уже стоит HP Smart Array P410. Думаю как поведет себя там китайский адаптер с алика? Взять к примеру PCI-e gen3 x16 - четырехканальный, и воткнуть туда 2 накопителя. Судя по отзывам с алика, у меня есть сомнения что заведется. Да и чипсет с PCI-e gen2. Кто-нибудь пробовал такую связку?

 

commetaR37
()

video streaming proxy server

Задача реализовать потоковое видео по схеме:

  1. вебкамера через браузер транслирует поток на сервер.
  2. к серверу подключаются клиенты через браузер.
  3. вебкамер может быть много, у разных стримеров.
  4. серверов тоже может быть много, чтобы не упираться в пропускную способность сети.
  5. все это управляется через родительский сервер с сайтом на php.

Подскажите куда копать? наткнулся на нечто похожее здесь https://flashphoner.com/webrtc-server-potokovogo-video-dlya-onlajjn-t/?lang=ru какие есть еще варианты?

 

commetaR37
()

apt сломался You might want to run 'apt-get -f install' to correct these

lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.7 LTS
Release:	16.04
Codename:	xenial

попытался установить dpkg -i phpmyadmin_4.9.5+dfsg1-2_all.deb

теперь все время

apt install p7zip-full
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 phpmyadmin : Depends: php
              Depends: php-phpmyadmin-sql-parser (>= 4.3.2) but it is not installable
              Depends: php-phpmyadmin-sql-parser (< 5~~) but it is not installable
              Depends: php-phpmyadmin-motranslator (>= 5.0) but it is not installable
              Depends: php-phpmyadmin-motranslator (< 6~~) but it is not installable
              Depends: php-phpmyadmin-shapefile (>= 2.0) but it is not installable
              Depends: php-phpmyadmin-shapefile (< 3~~) but it is not installable
              Depends: php-google-recaptcha (>= 1.1) but it is not installable
              Depends: php-google-recaptcha (< 2~~) but it is not installable
              Depends: php-psr-container (>= 1.0) but it is not installable
              Depends: php-psr-container (< 2~~) but it is not installable
              Depends: php-twig (>= 2.9) but it is not going to be installed
              Depends: php-twig (< 3~~) but it is not going to be installed
              Depends: php-twig-extensions (>= 1.5.1) but it is not installable
              Depends: php-twig-extensions (< 1.6~~) but it is not installable
              Depends: php-symfony-expression-language but it is not going to be installed
              Depends: libjs-openlayers but it is not going to be installed
              Recommends: php-bz2
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

пробовал apt autoremove apt install -f dpkg --configure -a apt autoclean Ничего не помогает, пакетный менеджер предлагает удалить ispmanager-lite ispmanager-pkg-myadmin phpmyadmin а я не хочу

apt-get -f install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  javascript-common libevent-core-2.0-5 libjs-jquery libjs-sphinxdoc libjs-underscore php-gettext php-phpseclib php-tcpdf
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  php php7.0
The following packages will be REMOVED:
  ispmanager-lite ispmanager-pkg-myadmin phpmyadmin
The following NEW packages will be installed:
  php php7.0
0 upgraded, 2 newly installed, 3 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 4,150 B of archives.
After this operation, 27.2 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.

как починить?

 ,

commetaR37
()

Анализ исходящего трафика

Есть сервер на Centos, isp panel, хостятся сайты, все как обычно.

Бывают случаи когда боты эксплуатируют уязвимости и устанавливают backdoor`ы

В последний раз скрипт брутил сторонние серверы, пришлось заблокировать исходящий в iptables по пользователю.

Отсюда вопрос, чем воспользоваться для анализа исходящего трафика?

Пока мыслю в сторону iptables log, и блокировать если много исходящих (сигнатуру проработать можно), или есть готовые решения?

 , ,

commetaR37
()

Конвертер webp на лету, для Linux веб сервера.

Есть задача создавать копии графических файлов на сервере в формате webp.

Например: корень сайта /var/www/user/site.ru/, в нем есть несколько вложенных подкаталогов куда могут быть залиты png|jpg. И есть в корне подкаталог webp/ где лежат webp копии, с сохранением структуры вложенности каталогов.

Сейчас я по cron запускаю скрипт, сканирующий каталоги, и если появился новый файл, или есть разница времени модификации, то запускается cwebp и создается копия.

Вопрос в чем, на сервере много сайтов и частый обход каталогов затратная операция. Может есть другие варианты? смотрел в сторону icron но там вроде нет возможности мониторить подкаталоги. Еще есть мысль набросать на c++ слушателя fanotify на точке монтирования.

 

commetaR37
()

sensors как определить датчики температуры?

uname -a
Linux 5.3.0-43-generic #36~18.04.2-Ubuntu SMP Thu Mar 19 16:03:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

мать B450M DS3H (rev. 1.0) ryzen 2600x

Поставил модуль it87, теперь sensors сообщает:

it8686-isa-0a40
Adapter: ISA adapter
in0:          +0.38 V  (min =  +0.00 V, max =  +3.06 V)
in1:          +2.00 V  (min =  +0.00 V, max =  +3.06 V)
in2:          +2.03 V  (min =  +0.00 V, max =  +3.06 V)
in3:          +2.00 V  (min =  +0.00 V, max =  +3.06 V)
in4:          +1.09 V  (min =  +0.00 V, max =  +3.06 V)
in5:          +0.90 V  (min =  +0.00 V, max =  +3.06 V)
in6:          +1.37 V  (min =  +0.00 V, max =  +3.06 V)
3VSB:         +3.29 V  (min =  +0.00 V, max =  +6.12 V)
Vbat:         +3.24 V  
fan1:        2586 RPM  (min =   10 RPM)
fan2:           0 RPM  (min =    0 RPM)
temp1:        +34.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        +46.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:        +37.0°C  (low  =  +0.0°C, high = +70.0°C)  sensor = AMD AMDSI
temp4:        +16.0°C  (low  =  +0.0°C, high = +127.0°C)  sensor = thermistor
temp5:        +36.0°C  (low  =  +0.0°C, high = -113.0°C)  sensor = thermistor
temp6:        +41.0°C  (low  =  +0.0°C, high = -113.0°C)  sensor = thermistor
intrusion0:  ALARM

Теперь как понять какой датчик откуда? temp3 явно процессор, а остальные не понятно.

https://www.gigabyte.ru/products/translate/6513/tmpl/images/smart-fan5.png

 

commetaR37
()

Varnish и несколько хостов

На сервере крутится apache и nginx, кэширую то что можно через varnish, не соображу как добовать поддержку нескольких виртуальных хостов. По примерам пробовал делать несколько именованых backend и в sub vcl_recv по домену менять переменную

if (req.http.host == "site1.ru") {
	set req.http.host = "127.0.0.1";
	set req.backend = site1ru;
	return (lookup);
}
if (req.http.host == "site2.ru") {
	set req.http.host = "127.0.0.1";
	set req.backend = site2ru;
	return (lookup);
}
Но вылетает с ошибкой Unknown variable 'req.backend' Видимо этот пример от старой vcl

Подскажите как правильно реализовать, вот мой конфиг на всякий случай.

# Сообщаем компилятору о том, что используется новая версия VCL 4
vcl 4.0;

include "devicedetect.vcl";

# Настройки бэкенда
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}


# Диапазон IP/Хостов, которым разрешено выполнять PURGE-запросы для очистки кэша
acl purge {
    "localhost";
    "127.0.0.1";
}

# Получение запроса от клиента
sub vcl_recv {
		call devicedetect;

        # Разрешить очистку кэша вышеописанному диапазону
        if (req.method == "PURGE") {
                # Если запрос не из списка, то разворачивать
                if (!client.ip ~ purge) {
                        return(synth(405, "This IP is not allowed to send PURGE requests."));
                }
                return (purge);
        }

        # POST-запросы а также страницы с Basic-авторизацией пропускать
        if (req.http.Authorization || req.method == "POST") {
                return (pass);
        }

        # Пропускать админку и страницу входа
        if (req.url ~ "wp-(login|admin)" || req.url ~ "preview=true" || req.url ~ "(manager|php|assets|components)") {
			if( !(req.url ~ "\.html") ){
                return (pass);
            }
        }

        # Если установлены cookies "wordpress_" или "comment_" пропускаем напряиую к бэкенду
        if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_" || req.http.Cookie ~ "modx_admin") {
                return (pass);
        }


        # Удаляем cookies, содержащие "has_js" и "__*", добавляемые CloudFlare и Google Analytics, так как Varnish не будет кэшировать запросы, для которых установлены cookies.
        set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", "");

        # Удаление префикса ";" в cookies, если вдруг будет обнаружен
        set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");

        # Удаляем Quant Capital cookies (добавляются некоторыми плагинами)
        set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", "");
        # Удаляем wp-settings-1 cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");

        # Удаляем wp-settings-time-1 cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", "");

        # Удаляем wp test cookie
        set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", "");

        # Удаляем cookie, состоящие только из пробелов (или вообще пустые)
        if (req.http.cookie ~ "^ *$") {
                unset req.http.cookie;
        }

        # Для статических документов удаляем все cookies, пусть себе кэшируются 
        if (req.url ~ "\.(css|js|png|gif|jp(e)?g|swf|ico|woff|svg|htm|html)" || req.url ~ "/") {
                unset req.http.cookie;
        }

        # Если cookie не найдено, удаляем данный параметр из пришедшего запроса как таковой
        if (!req.http.cookie) {
                unset req.http.cookie;
        }

        # Не кэшировать запросы с установленными cookies, это уже не касается WordPress
        if (req.http.Authorization || req.http.Cookie) {
                # Not cacheable by default
                return (pass);
        }

        # Кэшировать всё остальное
        return (hash);
}

sub vcl_pass {
        return (fetch);
}

sub vcl_hash {
        hash_data(req.url);

        return (lookup);
}

# Приём ответа от бэкенда
sub vcl_backend_response {
        # Удаляем ненужные заголовки
        unset beresp.http.Server;
        unset beresp.http.X-Powered-By;
        
        # Для статических файлов, которые отдаёт бэкенд...
        if (bereq.url ~ "\.(css|js|png|gif|jp(e?)g)|swf|ico|woff|svg|htm|html" || bereq.url ~ "/" ) {
                # Удаляем все куки 
                #unset beresp.http.cookie;
                # Устанавливаем срок хранения в кэше - неделю
                set beresp.ttl = 1d;
                # Устанавливаем заголовки Cache-Control и Expires, сообщая браузеру о том, что эти файлы стоит сохранить в кэше клиента и не нагружать лишниий раз наш сервер
                unset beresp.http.Cache-Control;
                set beresp.http.Cache-Control = "public, max-age=604800";
                set beresp.http.Expires = now + beresp.ttl;
        }

        # Не кэшировать админку и страницу логина
        if (bereq.url ~ "wp-(login|admin)" || bereq.url ~ "preview=true" || bereq.url ~ "(manager|php|assets|components)") {
			if( !(bereq.url ~ "\.html") ){
                set beresp.uncacheable = true;
                set beresp.ttl = 30s;
                return (deliver);
            }
        }

        # Разрешить устанавливать куки только при обращении к этим путям, всё остальное будет резаться
        if (!(bereq.url ~ "(wp-login|wp-admin|preview=true|manager|php|assets|components)") || bereq.url ~ "\.html") {
                unset beresp.http.set-cookie;
        }

        # Не кэшировать результат ответа на POST-запрос или Basic авторизации
        if ( bereq.method == "POST" || bereq.http.Authorization ) {
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }

        # Не кэшировать результаты поиска
        if ( bereq.url ~ "\?s=" ){
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }

        # Не кэшировать страницы ошибок, только нужные вещи в кэше!
        if ( beresp.status != 200 ) {
                set beresp.uncacheable = true;
                set beresp.ttl = 120s;
                return (deliver);
        }

		if (bereq.http.X-UA-Device) {
			if (!beresp.http.Vary) { # no Vary at all
				set beresp.http.Vary = "X-UA-Device";
			} elsif (beresp.http.Vary !~ "X-UA-Device") { # add to existing Vary
				set beresp.http.Vary = beresp.http.Vary + ", X-UA-Device";
			}
		}
		# comment this out if you don't want the client to know your classification
		set beresp.http.X-UA-Device = bereq.http.X-UA-Device;        

        # Хранить в кэше всё прочее на протяжении одного дня
        set beresp.ttl = 1d;
        # Срок жизни кэша после истечения его TTL
        set beresp.grace = 30s;

        return (deliver);
}

# Действия перед отдачей результата пользователю
sub vcl_deliver {
		if ((req.http.X-UA-Device) && (resp.http.Vary)) {
			set resp.http.Vary = regsub(resp.http.Vary, "X-UA-Device", "User-Agent");
		}
		
        # Удаляем ненужные заголовки
        unset resp.http.X-Powered-By;
        unset resp.http.Server;
        unset resp.http.Via;
        unset resp.http.X-Varnish;

        return (deliver);
}

 

commetaR37
()

NGINX proxy_cache не кэширует HTTP 1.0

Немного запутался видимо в контекстах,

server {

	# show cache status and any skip cache reason
	add_header Bullet-Proxy-Cache $upstream_cache_status;
	add_header Cache-BYPASS-Reason $skip_reason;

	# define nginx variables
	set $skip_cache 1;
	set $skip_reason "";

	if ($request_uri ~* "/|/*.html") {
		set $skip_cache 0;
		set $skip_reason HTML; 
	}

	# security for bypass so localhost can empty cache
	if ($remote_addr ~ "^(127.0.0.1|xx.xx.xx.xx)$") {
		set $bypass $http_secret_header;
	}

	# Don't cache URIs containing the following segments
	if ($request_uri ~* "/manager/|/*.php|sitemap.xml") {
		set $skip_cache 1;
		set $skip_reason URI; 
	}
			
	# skip caching POST
	if ($request_method = POST) {
		set $skip_cache 1;
		set $skip_reason POST; 
	}


	server_name site.ru www.site.ru;
	ssl_certificate "/var/www/httpd-cert/www-root/site.ru_le3.crtca";
	ssl_certificate_key "/var/www/httpd-cert/www-root/site.ru_le3.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset UTF-8;
	index index.php index.html;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/site.ru/*.conf;
	access_log /var/www/httpd-logs/site.ru.access.log;
	error_log /var/www/httpd-logs/site.ru.error.log notice;
	set $root_path /var/www/www-root/data/www/site.ru;
	root $root_path;
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @fallback;
		}
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|woff|woff2|ico)$ {
			try_files $uri $uri/ @fallback;
			expires 30d;
		}
		location / {
			try_files /does_not_exists @fallback;
		}

	}
	location @fallback {





		proxy_cache site.ru;
		proxy_cache_revalidate on;
		proxy_ignore_headers Expires Cache-Control X-Accel-Expires;

		proxy_hide_header "Set-Cookie";
		expires -1;


		proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
		proxy_cache_bypass $skip_cache;
		proxy_no_cache $skip_cache;
		proxy_cache_valid 301 302 0;
		proxy_cache_valid 200 24h;
		proxy_cache_valid 404 1m;


		# mobile users
		set $ismobile 0;
		if ($http_user_agent ~* '(iPhone|iPod|mobile|Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile)') {
			set $ismobile 1;
		}

		set $isgzip 0;
		if ($http_accept_encoding ~* 'gzip') {
			set $isgzip 1;
		}

		proxy_cache_key $request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri|$is_args|$ismobile|$isgzip;



		proxy_pass http://127.0.0.1:8080;
		proxy_redirect http://127.0.0.1:8080 /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Forwarded-Port $server_port;
		access_log off;
	}
	gzip on;
	gzip_comp_level 9;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
	listen xx.xx.xx.xx:443 ssl http2;
}

этот конфиг кэширует прокси запросы к apache, при отдаче сообщает в заголовках ответа, если есть в кэше то HIT а если нету то MISS.

Проблема в том что при запросах из браузера (http 2 по логам) запросы кэшируются, первый MISS последующие HIT.

А когда запрос идет через вебмастер (http 1.0 по логам) то все время MISS. Подскажите что я делаю не так? Как сделать чтобы HTTP 1.0 тоже сохранялся в кэше?

 

commetaR37
()

XUBUNTU 18.04 Тормозит курсор мыши

Обновил материнку и процессор на gigabyte b440m ryzen 2600x

Но поставил старую видяху GeForce 7300 GS

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

Систему не переустанавливал, установленная xubuntu 18 поднялась без проблем. Только ядро обновил до 5.0

Проблема в том что курсор мыши (радио usb) иногда подтормаживает в GUI, проприетарный драйвер nvidia поставить не удается (устарел).

Со старой ati видяхой такого не было. Грешу на встроенный видеодрайвер (или прерывания), подскажите где копать?

uname -r
5.0.0-29-generic
ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.1/0000:06:00.0 ==
modalias : pci:v000010DEd000001DFsv00001043sd000081F1bc03sc00i00
vendor   : NVIDIA Corporation
model    : G72 [GeForce 7300 GS]
driver   : nvidia-304 - third-party free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

 ,

commetaR37
()

RSS подписка на новые темы