nginx + uWSGI + sopds в sub-uri домена

7 years 4 months ago - 7 years 3 months ago #883 by omgiafs
omgiafs created the topic: nginx + uWSGI + sopds в sub-uri домена
Проблема: не работает поиск в opds каталоге.
Проблема в коде sopds исправлена, в версии v0.38 18.12.2016. Кто скачал раньше - перекачать или сделать git pull, если ставили из git'а.
Так что можно считать рабочей инструкцией.
Если не заработает, читать логи nginx, uwsgi и мануал uWSGI .

Sopds развернут в веб-uri example.com/sopds
Через веб все работает.
Через opds все работает. А вот поиск не работает.

ФРАГМЕНТЫ nginx.conf:
http {
    upstream django_sopds {
        server unix:///var/run/uwsgi/app/sopds/socket;
    }

	server {
	...

	location /sopds {
	    allow all;

	    include          uwsgi_params;
	    uwsgi_pass   django_sopds;

	    access_log /var/log/nginx/sopds-access.log;
	    error_log    /var/log/nginx/sopds-error.log;
	}

	location ^~ /sopds/static/ {
	    alias /var/www/sopds/static/;
	    access_log off;
	    error_log  off;
	}
}

sopds.ini для uWSGI:
[uwsgi]
# конфиг без virtualenv, python системный
# если с virtualenv, то добавить параметр
# venv = /path/to/virtualenv/
plugin = python3

# папка приложения
chdir = /var/www/sopds/

# sopds в sub-uri "/sopds" домена, т.е.
# www.example.com/sopds
mount = /sopds=sopds/wsgi.py
manage-script-name = true

callable = application
processes = 4
threads = 2

# пользователь, под которым запускаем uwsgi
uid = www-data
gid = www-data

sopds/settings.py:
STATIC_URL = '/sopds/static/'
Last Edit: 7 years 3 months ago by omgiafs.

Please Войти or Create an account to join the conversation.

  • omgiafs
  • omgiafs's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
7 years 4 months ago - 7 years 4 months ago #884 by omgiafs
omgiafs replied the topic: nginx + uWSGI + sopds
Конфиг нормален. Можно считать инструкцией.

Моя проблема - это баг sopds.
В логах nginx ничего не появлялось, потому что я мониторил лог локейшна /sopds, а ссылка на поиск генерировалась как /opds/...
Создал проблему на Гитхабе.
Last Edit: 7 years 4 months ago by omgiafs.

Please Войти or Create an account to join the conversation.

  • omgiafs
  • omgiafs's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
7 years 4 months ago #885 by mitshel
mitshel replied the topic: nginx + uWSGI + sopds
Действительно, нахардкодил немного ;(
Проблема появлялась только при использовании SOPDS на sub-uri. Поправил без изменения номера версии.

Please Войти or Create an account to join the conversation.

  • mitshel
  • mitshel's Avatar
  • Offline
  • Администратор
  • Администратор
More
7 years 3 months ago - 7 years 3 months ago #997 by sanrega
sanrega replied the topic: nginx + uWSGI + sopds

omgiafs wrote: Конфиг нормален. Можно считать инструкцией.


Конфиг не работает, только что проверил на свежеустановленном Debian 8.

Перезапуск nginx сразу выдает ошибку nginx: [emerg] "server" directive is not allowed here in /etc/nginx/nginx.conf:7
Last Edit: 7 years 3 months ago by sanrega.

Please Войти or Create an account to join the conversation.

  • sanrega
  • sanrega's Avatar
  • Offline
  • Новый участник
  • Новый участник
More
7 years 3 months ago - 7 years 3 months ago #1009 by omgiafs
omgiafs replied the topic: nginx + uWSGI + sopds
У меня, кстати, тоже Debian 8, только stable пакеты, всё из реп.

Предполагается не бездумная копи-паста, а копирование необходимых для Вас блоков. Собственно, здесь и приведены только блоки конфига, имеющие отношение к sopds в sub-uri "/sopds".
Здесь не прописаны параметры сервера, включая имя, IP и прочее.

Если я буду их приводить, неработоспособность еще больше увеличится, т.к. знаю по себе - нельзя так просто взять и скопировать конфиг nginx :)

Здесь - необходимые и достаточные параметры для того, чтобы на вашем НАСТРОЕННОМ веб-сервере с nginx-фронтендом запустить sopds в sub-uri "/sopds".

Что, вскипели? Правильно. Конфиг нерабочий :) Секция server должна находиться внутри секции http, а не рядом с ней.
Так получилось, потому что у меня конфиг разнесён по нескольким файлам, основной - секция HTTP, все локейшны - в других файлах, подключаются через include.

Вот вам пример конфига nginx одним файлом.
В данном примере принудительное использование https.
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
       }

http   {

    upstream django_sopds {
        server unix:///var/run/uwsgi/app/sopds/socket;
    }

    ## Basic Settings
    sendfile on;
    sendfile_max_chunk  128k;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    include win-utf;

    ## Logging Settings
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    gzip on;
    gzip_disable "msie6";
    ssi on;    

    server {
      listen 80 default_server;
      server_tokens off;
      server_name  example.com www.example.com;
      # enforce https
      return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl;
        server_name  example.com www.example.com;
        server_tokens off;

        ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        # Add headers to serve security related headers
        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;

        keepalive_timeout 5 5;
        send_timeout 10;

        client_body_timeout 10;
        client_header_timeout 10;
        output_buffers 1 32k;
        postpone_output 1460;
        access_log  /var/log/nginx/example.com/access.log;
        error_log   /var/log/nginx/example.com/error.log;

        location / {
            root /var/www/example.com/www;
            charset utf-8;
            index  index.html;
        }

        # Simple OPDS server
        location /sopds {
            include      uwsgi_params;
            uwsgi_pass   django_sopds;

            access_log /var/log/nginx/sopds/sopds-access.log;
            error_log  /var/log/nginx/sopds/sopds-error.log;
        }

        # Simple OPDS static content
        location ^~ /sopds/static/ {
            alias /var/www/sopds/static/;

            access_log /var/log/nginx/sopds/sopds-static-access.log;
            error_log  /var/log/nginx/sopds/sopds-static-error.log;
        }
    }
}


Исправил конфиг.
Last Edit: 7 years 3 months ago by omgiafs.

Please Войти or Create an account to join the conversation.

  • omgiafs
  • omgiafs's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
Time to create page: 0.157 seconds