Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (28)

Лучшие ответы пользователя

Все ответы (51)
  • Nginx redirect from http to https?

    @metajiji
    Согласно официальной документации рекомендуют использовать такую конструкцию:
    server {
            listen 80;
            server_name example.com;
            return 301 https://$server_name$request_uri;  # enforce https
    #        rewrite ^(.*) https://www.example.com$uri permanent;
    }
    Ответ написан
  • Какие существуют объективные недостатки у systemd?

    @metajiji
    Интересно наблюдать как прямо сейчас Хейтеры в яндекс-кликхаус делают велосипед на init+sed, чтобы симулировать 1 строчку Restart:)
    Только вдумайтесь в происходящее. Запустил сервис, в кроне добавилась задача, если сервис упал - запусти. Если сервис остановили скриптом, крон таска убирается. Слов нет, только эмоции. А вы про какие-то glibc беспокоитесь, там у них пакет в зависимостях не тянет за собой which, а в скриптах использует ы? Знакомо ага? Да молитесь на systemd, наконец навели порядок в этом безобразии всяких upstart, SysV, udev и кучи другого добра! А ещё кто не знал, но полюбас прогревал себе пукан, когда в fstab прописана фигня или недоступный nfs, сервер вообще не включается! И нужно душевно так провести время, хорошо, если есть ipmi, то вопрос 5 минут, а если нет? Так вот к чему я, есть .mount юниты это же каеф + зависимость кинул, чтобы сервис без шары не взлетал и падал вслед за шарой. Сервер запустится, шара нет, сервис тоже не поднимется, а зайти по ssh можно и главное починить легко и оперативно. И это только малая часть боли которую systemd реально прямо сейчас решает без плясок и крови из глаз.
    Ответ написан
  • Django как настроить отдачу картинок с локального хранилища?

    @metajiji
    Остается только привести дефолтный конфиг nginx для Django:
    server {
    	listen 80;
    	server_name domain.ltd;
    	root /srv/app/public;
    
    	# Logs.
    	access_log /var/log/nginx/domain.ltd_access.log;
    	error_log /var/log/nginx/domain.ltd_error.log;
    
    	# Options.
    	client_max_body_size 0;
    	keepalive_timeout 5;
    
    	# Locations.
    	location / {
    		try_files $uri @proxy_to_app;
    	}
    
    	location @proxy_to_app {
    		proxy_pass http://127.0.0.1:8001;  # See guniconf.py file.
    		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;
    		proxy_redirect off;
    	}
    }


    В таком случае, удобно будет организовать проект следующим образом:
    /srv/app/
    ├── example
    │   ├── forms.py
    │   ├── __init__.py
    │   ├── migrations
    │   ├── models.py
    │   ├── settings.py
    │   ├── static
    │   ├── templates
    │   ├── urls.py
    │   ├── views.py
    │   └── wsgi.py
    ├── logs
    ├── manage.py
    ├── public
    │   └── static
    ├── README.md
    ├── requirements.txt
    └── venv


    Для работы этой схемы проекта нужно добавить в settings.py:
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'static')


    При такой конфигурации веб сервер смотрит в каталог /srv/app/public/ и попытается сперва отдать с диска то, что запросил пользователь, если не найдет, то отправит запрос в Django.
    А еще появляется возможность складывать свои собственные статические файлы в этот каталог (например zip архив или pdf документ), кроме того, нет необходимости что-то менять в конфигурации nginx, что очень удобно.

    Для media можно поступить аналогично, если для скачивания media не предусмотрена авторизация, для этого нужно добавить в settings.py:
    STATIC_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'public', 'media')

    /srv/app/
    ├── example
    ├── logs
    ├── public
    │   ├── media
    │   └── static
    └── manage.py


    Если все-таки авторизация нужна, то не стоит складывать каталог media в public, в таком случае лучше придерживаться стандартной конфигурации:
    STATIC_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'media')

    /srv/app/
    ├── example
    ├── logs
    ├── media
    ├── public
    │   └── static
    └── manage.py

    Еще порекомендовал бы настроить X-Accel-Redirect для отдачи media через nginx, но об этом я в этом посте уже не буду писать.
    Ответ написан
  • Как дать белый IP, linux на VirtualBox?

    @metajiji
    Сеть вашей вм в бридж с реальным интерфейсом хоста. На холсте никаких настроек не делаем.

    Если ваш провайдер выдал вам 1 ИП, а с хоста хочется ходить в интернет, то в виртуалкк добавляем ещё один интерфейс, настраиваем ИП на нем из немаршрутизируемого диапазона - серые ип. Например 10.0.0.2/24, а внутри вм делаем 10.0.0.1/24, затем включаем ip forwarding и настраиваем masquerading(nat) для серой сети.

    Получаем, что виртуалка торчит в интернет белым ИП, а хост через виртуалку ходит в интернет.
    Ответ написан