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

Достижения

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

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

Все теги (26)

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

Все ответы (38)
  • 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;
    }
    Ответ написан
  • 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, но об этом я в этом посте уже не буду писать.
    Ответ написан
  • DLE 11 + nginx не работает Rewrite, как быть?

    @metajiji
    ...
    index index.php index.html index.htm;
    location ~ \.php$ {
    ...
    fastcgi_index  index.php;
    }

    Судя по конфигу, не указан index - документ по умолчанию. В случае использования nginx + php-fpm его указывать нужно в 2 местах, как в коде выше.

    Кстати, конфиг слишком сложен и ужасен, уверен, что его можно сделать без этой кучи реврайтов, а так же без if констукций. Рекомендую почитать про try_files и поискать готовые конфиги nginx для DLE, уверен, они существуют и в более приятном виде.
    Ответ написан
  • Как разрабатывать программы с фоновыми задачами?

    @metajiji
    Или использовать менеджер очередей. Например celery в python совместно с rabbitmq или redis зависит от задачи и объема сообщений.
    Ответ написан