vellezz.info

Shell escape

Mar
24

shell escape…

(more…)

Sprawdzenie statusu html dla adresów Bash inline

Dec
06

Jak odpytać adresy url o status html z bash’a?

(more…)

Commands I Forget Linux

Jul
04

Lista poleceń linux, które często zapominam 🙂

(more…)

serwowanie plików statycznych na nginx

Jun
14

Po co to komu?

Ano po to, że unikamy doklejania ciastek (Same Origin Policy)  do requestów o pliki statyczne, które w tym przypadku są całkowicie zbyteczną informacja przesyłaną w obydwie strony. Mniej danych, mniejszy ruch, więcej drzew.

A więc do dzieła…

Edytujemy /etc/nginx/avaliable-sites/<domena>.conf, lub inna lokalizacja w zależności od dystrybucji chodzi o konfigurację nginxa pod konkretną domenę.

server {
    listen 80;
    server_name static.<domena>;
    access_log   <logs_dir>static.<domena>.access.log;
    error_log    <logs_dir>static.<domena>.error.log;

    more_set_headers 'Server: Static';

    location / {
        root <root_path>;
        sendfile           on;
        sendfile_max_chunk 1m;
        tcp_nopush on;
        tcp_nodelay       on;
        keepalive_timeout 65;
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public";

        location ~* \.(eot|ttf|woff|woff2)$ {
            add_header Access-Control-Allow-Origin *;
            }
        }
}

Kilka słów wyjaśnienia konfiguracji:

  • sendfile on – włączenie tej dyrektywy eliminuje etap kopiowania danych do bufora i umożliwia bezpośrednie kopiowanie danych z jednego deskryptora do innego,
  • sendfile_max_chunk 1m – zapobiega jednemu szybkiemu połączeniu z całkowitym zajmowaniem procesu roboczego, ogranicza ilość danych przesyłanych w pojedynczym wywołaniu w tym wypadku do 1MB,
  • tcp_nopush on – umożliwia wysyłanie nagłówków odpowiedzi HTTP w jednym pakiecie zaraz po otrzymaniu fragmentu danych przez sendfile,
  • tcp_nodelay on – pozwala na pominięcie algorytmu Nagle, który konsoliduje wiele małych pakietów na większy i wysyła pakiet z opóźnieniem 200 ms. Obecnie w przypadku dużych plików statycznych dane mogą być wysyłane natychmiast bez względu na rozmiar pakietu.
  • keepalive_timeout 65 – ustawia timeout dla keepalive
  • zagnieżdżone location ustawia w nagłówku Access-Control-Allow-Origin *
  • expires max, add_header Pragma public, add_header Cache-Control “public” – kontrola cache przeglądarki dla plików – nie dotyczy wpisu, więc się nie będę rozwodził.

OK, to w sumie możemy przetestować…

service nginx configtest
service nginx reload

 

Bibliografia:

  • Algorytm Nagle – https://en.wikipedia.org/wiki/Nagle%27s_algorithm
  • Same-origin policy – https://en.wikipedia.org/wiki/Same-origin_policy

Moduł http_geoip_module dla Nginx + php_fpm

Jun
13

Ściągamy bazy danych krajów i miast

cd /etc/nginx/geoip
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz

Rekonfigurujemy Nginx’a

Edytujemy plik /etc/nginix/nginx.conf.
W sekcji http dodajemy poniższe linijki

#GeoIP
geoip_country /etc/nginx/geoip/GeoIP.dat; # the country database
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # the city database

Następnie deklarujemy zmienne dla php-fpm
Edytujemy plik /etc/nginx/fastcgi_params dodajemy poniższe linijki

### GEOIP Variables ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;

Sprawdzamy konfig

service nginx configtest

Przeładowania nginx’a

service nginx reload

Przydałoby się przetestować nową konfigurację. Tworzymy skrypt PHP np. o poniższej zawartości:

<html><body>
<?php
$keys = preg_filter('/^GEOIP(.*)/', '$0', array_keys( $_SERVER ));

foreach($keys as $key){
    echo $key . ": ". getenv($key)."<br>";
}
?>
</body></html>

Wynik powinien wyglądać tak:

GEOIP_COUNTRY_CODE: PL
GEOIP_COUNTRY_CODE3: POL
GEOIP_COUNTRY_NAME: Poland
GEOIP_CITY_COUNTRY_CODE: PL
GEOIP_CITY_COUNTRY_CODE3: POL
GEOIP_CITY_COUNTRY_NAME: Poland
GEOIP_REGION: xxx
GEOIP_CITY: xxx
GEOIP_POSTAL_CODE: xxx
GEOIP_CITY_CONTINENT_CODE: EU
GEOIP_LATITUDE: xx.xxxx
GEOIP_LONGITUDE: xx.xxxx

 

Curl , pop3 jak sprawdzić ilość wiadomości?

Jun
13

Tak:

curl -u <user>@<domain>:<password> --ssl pop3://<pop3_mail_server>:<pop3_port>/ -k | wc -l

 

crossbar.io i systemd

Jun
13

Tworzymy plik /etc/init/crossbar.conf

touch /etc/init/crossbar.conf

Edytujemy:

vi /etc/init/crossbar.conf

Zawartość:

description "Crossbar.io"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 20 5

setuid <user>
setgid <group>

env MYVAR1=foobar

exec <crossbar_dir>crossbar start --cbdir=<cross_bar_config_dir>.crossbar

Konfiguracja usługi.

Tworzymy plik /etc/systemd/system/crossbar.service

touch plik /etc/systemd/system/crossbar.service

Edytujemy:

vi /etc/systemd/system/crossbar.service

Zawartość:

[Unit]
Description=Crossbar.io
After=network.target

[Service]
Type=simple
User=<user>
Group=<user>
StandardInput=null
StandardOutput=journal
StandardError=journal
Environment="MYVAR1=foobar"
ExecStart=<crossbar_dir>crossbar start --cbdir=<cross_bar_config_dir>.crossbar
Restart=on-abort

[Install]
WantedBy=multi-user.target

Uruchomienie:

service crossbar start

Autostart:

systemctl enable crossbar.service

 

python w virtualenv i systemd

Jan
22

Sposób rozwiązania problemu uruchomienia skryptu python jako usługi w systemie opartym na systemd (w tym przypadku Ubuntu 16.04LTS).

(more…)