Архивы по Категориям: linux

Редирект на nginx

Хозяйке на заметку

у сайта есть много доменов .ру .орг .ком и т.п. хочу чтоб был один и главный

в разделе server{}

пишу

[cc lang=”bash”]if ($host != ‘your_domain.com’ ) {
rewrite ^/(.*)$ http://your_domain.com/$1 permanent; }[/cc]

Кому не понятно, в первой строке смотрим если ваш домен отличается от искомого, то редиректим на искомый

Запускаем django на nginx

Давным давно, я писал как установить nginx

там же в комментариях подсказали ещё способ
[cc lang=”bash”]
nginx=stable # use nginx=development for latest development version
add-apt-repository ppa:nginx/$nginx
apt-get update
apt-get install nginx[/cc]

получаем последний nginx.

Напомню, что у меня за nginx стоят разные “бэк-энды”
для самого нагруженного сайта я использую php5-fpm
для остальных сайтов я использую apache2
для Django проектов я использовал Apache2 + mod_python но его прожорливость, давала повод задуматься.

в итоге я искал способ освободить ресурсы занимаемые Индейцем.

Такой способ нашёлся 🙂

создаю конфигурационный файл хоста nginx.

[cc lang=”bash”]touch djangosite[/cc]

у меня они лежат в /etc/nginx/sites-available и уже от туда симлинками идут в /etc/nginx/sites-enabled

Конфигурационный файл такого содержания

[cc lang=”bash”]server {
listen 80;
server_name sitename.ru www.sitename.ru;

charset utf-8;

access_log /var/log/nginx/sitename-access.log;
error_log /var/log/nginx/sitename-error.log;
client_max_body_size 300m;

# Это, чтоб стили и статические файлы админки подгружались, проверьте у себя,
# в разных версиях Ubuntu могут быть разные версии Питона.
# ну и в настройках джанго проекта разумеется у нас тоже указан ADMIN_MEDIA как media_admin

location /media_admin {
alias /usr/lib/python2.5/site-packages/django/contrib/admin/media;
}
location / {
#Это как пример как мы запускаем джангоСервер
#python ./manage.py runfcgi method=prefork socket=/tmp/sitemane.sock pidfile=/tmp/sitename.pid
# Общаться будем по сокету, хотя можно и по 127.0.0.1:8000
fastcgi_pass unix:/tmp/sitename.sock;
#Ага и вот этот файлик не забудем создать, о нём ниже
include fastcgi_params_django;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
[/cc]

так же создаём файл

[cc lang=”bash”]touch /etc/nginx/fastcgi_params_django[/cc]

и в него вкладываем вот такие параметры

[cc lang=”bash”]
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;

# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
[/cc]

проверяем верность конфигурации
[cc lang=”bash”]nginx -t[/cc]
если всё ОК идём дальше.

проекты джанго у меня лежат в /home/django

Заходим в нужный нам проект и создадим там скрипт сервера.

[cc lang=”bash”]touch server.sh[/cc]
Вот с таким содержанием

[cc lang=”bash”]#!/bin/bash

case “$1” in
“start”)
#есть 2 варианта запуска сервера, по сети и через unix сокеты
# последний выигрывает по производительности
#python ./manage.py runfcgi method=prefork host=127.0.0.1 port=8000 pidfile=/tmp/sitename.pid
python ./manage.py runfcgi method=prefork socket=/tmp/sitename.sock pidfile=/tmp/sitename.pid
# не забываем, про то, что сокет у нас мог прочитать фронт-энд
# а nginx у меня работает с правами www-data
chown www-data:www-data /tmp/sitename.sock
;;
“stop”)
kill -9 `cat /tmp/sitemane.pid`
;;
“restart”)
$0 stop
sleep 1
$0 start
;;
*) echo “Usage: ./server.sh {start|stop|restart}”;;
esac
[/cc]

Вот и весь скрипт, не забываем только поменять sitename на имя вашего сайта, а то получится, что на один pid или сокет у вас будет ссылаться несколько серверов.

чтоб запустить сервер
[cc lang=”bash”]./server.sh start[/cc]

А вот он и не запустился ругается на Flup

[cc lang=”bash”]No module named flup[/cc]

нам понадобится пакет flup это питоновский пакет, поэтому его я устанавливаю вот так
[cc lang=”bash”]easy_install flup[/cc]
Можно попробовать поставить его из репозитория убунты
[cc lang=”bash”]apt-get install python-flup[/cc]
Но я так не пробовал 😉

Всё сервер запустился, можно перезапустить nginx для применения новой конфигурации

[cc lang=”bash”]/etc/init.d/nginx restart[/cc]

Всё готово, наш сервер запустился.

Теперь по хорошему добавить скрипт запуска сервера в автозагрузку.

Есть админы, которые…

Много много букавак….

Все мы знаем, что есть админы, которые не делают бэкапы, и кто уже делает бэкапы…

Я вот непонятно кто, есть у меня сервер со злым рейдом на 4 порта, исторически сложилось, что на нём 2 зеркальных массива.
2х500 и 2х1500гб

И посетило меня чудо-юдо..
один винт из зеркального рейда пошёл в мир иной, точнее как пошёл, из одной папки пропала вся инфа, я подумал, что юзеры удалили попытался туда вернуть файлы из бэкапа, но убунта мне сказала что они уже там лежат.

Читать далее »

Настройка поиска в Linux Mint (Росинка) Firefox

Установил Linux Mint ( Росинка ), но вот беда, там в файрфоксе зачем-то вкорячивали “свой” гугло поиск
да не так, как это сделано в убунте 🙁

Вот такая получается страница результата
mint firefox search

Идём вот сюда

Тыкаем “Управление поисковыми плагинами” удаляем поиск гугла.
переходим на эту страницу
http://mycroft.mozdev.org/google-search-plugins.html
Там нахдим RU поиск на русском открываем, там нас спросят правда ли стоит добавить поиск гугла?
– Конечно

Вот и всё.
А так 10 дней в linux Mint есть вопросы конечно, есть мелке косяки, но в целом идея хороша.

Проблема с MTU PPPoE

И так, при соединении нескольких сетей, возникла проблема, что пинги не ходили, а сделано всё верно. Собака была зарыта вот тут

[cc lang=”bash”]/proc/sys/net/ipv4/ip_no_pmtu_disc[/cc]

Одним простым движением
[cc lang=”bash”]echo “1” > /proc/sys/net/ipv4/ip_no_pmtu_disc[/cc]
Всё решилось, но и для справки
Цитата с ОпенНЕТа

Переменная ip_no_pmtu_disc запрещает поиск PMTU (от англ. Path Maximum
Transfer Unit Максимальный Размер Пакета для выбранного Пути). Для
большинства случаев лучше установить в эту переменную значение FALSE,
или 0 (т.е. система будет пытаться определить максимальный размер
пакета, при котором не потребуется выполнять их фрагментацию, для
передачи на заданный хост). Но иногда, в отдельных случаях, такое
поведение системы может приводить к срывам соединений. Если у вас
возникают такие проблемы, то вам следует попробовать отключить эту опцию
(т.е. записать в переменную число 1) и установить нужное значение MTU.
Хочу обратить ваше внимание на то, что MTU и PMTU это не одно и то же!
MTU (от англ. Maximum Transfer Unit максимальный размер пакета)
определяет максимальный размер пакета для наших сетевых интерфейсов, но
не для сетевых интерфейсов на другом конце. PMTU опция, которая
заставляет систему вычислять максимальный размер пакета, при котором не
потребуется фрагментация пакетов, для маршрута к заданному хосту,
включая все промежуточные переходы. Значение по-умолчанию FALSE (0),
т.е. функция определения разрешена. Если записать число 1 в эту
переменную, то функция определения PMTU будет запрещена. Переменная
ip_no_pmtu_disc может принимать значение 0 или 1.

ещё для эта проблема должна решаться вот так.

[cc lang=”bash”]iptables -t mangle -A FORWARD -p tcp -m tcp –tcp-flags RST,SYN SYN -j TCPMSS –clamp-mss-to-pmtu[/cc]

либо вот так

[cc lang=”bash”] iptables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –set-mss 128[/cc]