Архив рубрики: www

[nginx] https proxy

Нашёл в рассылке по nginx: правильное проксирование https.

server {
   listen 80;
   listen 443 ssl;
   server_name .site.com;
   ssl_certificate /etc/nginx/domain.com.crt;
   ssl_certificate_key /etc/nginx/domain.com.key;
   ssl_session_cache  builtin:1000  shared:SSL:10m;
   ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:EECDH+RC4:RSA+RC4:!MD5;
   ssl_prefer_server_ciphers on;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ...
   location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header HTTPS $https;
   }
}

А можно проксировать через haproxy, используя протокол TCP вместо HTTP.

The plain HTTP request was sent to HTTPS port

Означает скорее всего то, что директивы

listen 80

и

listen 443

описаны в пределах одного блока server. Решений здесь 2:
— разнести из в разные блоки server {}
— закомментировать ssl on как показано на примере ниже:

server {
  listen 80;
  listen 443 default ssl;

  # ssl on   - remember to comment this out

}

Быстро поднимаем webserver

Если вам нужно быстро поднять webserver без установки дополнительного ПО, то эта статья для вас. Ниже будет описано несколько разных методов.

1) python

$python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Как видим, запустился web-сервер на порту 8000.

2) netcat

$while true ; do nc -l 80 < index.html ; done

Здесь идёт жёсткое указание, какой файл будет отдаваться по http.

Читать далее

Правильная ротация логов java/tomcat’a

Всё бы хорошо, но tomcat не понимает сигналs HUPSIGUSR1 (при их получении он просто завершается). Как быть, если надо ротировать логи. Есть 2 варианта: через системный log-ротатор и через встроенные механизмы самого tomcat’a. Я рассмотрю первый вариант, так как в нём больше возможностей в плане ротации файлов. Но тут есть нюанс: ротировать будем с помощью метода copytruncate, то есть нужный нам лог сначала копируется, а потом урезается до нулевой длинны, тем самым не нарушая последующей записи в исходный лог.

Читать далее

PHP Fatal error: Call to undefined method Imagick::getImageAlphaChannel()

Недавно столкнулся с такой проблемой: на одном сайте получаем ошибку, что в теме. Естественно многие подумают, что не установлен модуль imagick (или сам ImageMagick) для php. Но не тут-то было. Модуль (да и сам ImageMagick) установлен, виден через php -m, реинсталл модуля тоже не решил проблему. Через ldd проблем не видно. Осталось одно подозрение: что-то не так с самим модулем imagick.so.

Читать далее

[nginx] Исключения для limit_req_zone

Как убрать ограничение для limit_req_zone? Оказывается это просто и решается через модули geo и map. Ниже решение, найденное на просторах сети:

geo $limited_net {
    default      1;
    10.1.0.0/16  0;
}

map $limited_net $addr_to_limit {
    0  "";
    1  $binary_remote_addr;
}

limit_req_zone  $addr_to_limit  zone=gulag:10m  rate=2r/s;

Вся разгадка в том, что бы сделать непустое значение для нашей переменной. Напомню, что пустые значения (как в даном случае у нас определена подсеть 10.1.0.0/16) не учитываются.

[nginx] Исключения для auth_basic

Если вам нужно исключить для определёных IP auth_basic, то эта статья для вас. Замечу, что данный метод позволяет исключить только по IP, а не по другим признакам. Для этого в nginx’e есть модуль satisfy. Ниже выдержка из документации

синтаксис: satisfy all | any;
умолчание: satisfy all;
контекст: http, server, location

Разрешает доступ, если оба (all) или хотя бы один (any) из модулей ngx_http_access_module и ngx_http_auth_basic_module разрешают доступ.
Читать далее

[apache] rewrite url на другой домен с исключением

Задача: URL вида http://domain.com/URI перенаправлять на http://otherdomain.org/URI с сохранением URI. При этом, URL вида http://domain.com/lists* не редиректить. Решение такое (2 блока = один для домена без www, второй — с www):

RewriteCond %{REQUEST_URI} !^/lists(.+)$
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://otherdomain.org/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/lists(.+)$
RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.otherdomain.org/$1 [R=301,L]

А вот пример, когда нужно сделать такой редирект http://domain.com/page/URI -> http://otherdomain.com/URI (поместить а файл /page/.htaccess относительно корня сайта):

RewriteEngine On
RewriteRule ^(.*)$ http://otherdomain.org/$1 [R=301,L]