Частичные данные Django2.2, если не указан порт (ERR CONTENT LENGTH MISMATCH) - PullRequest
0 голосов
/ 19 февраля 2019

Оригинал: Прокрутите, чтобы увидеть самые последние новости, это оригинальное сообщение

Кажется, что таблицы данных работают только при переходе непосредственно к моей сети Djangoприложение на http://server.com:9001, даже когда я проксировал весь HTTP-трафик до 9001.

Снимок экрана при просмотре с http://server.com:9001/stores enter image description here

Снимок экрана при просмотре с http://server.com/stores enter image description here

Дата данных просто отказывается работать.Что еще более странно, у меня есть другая таблица данных в / servers , которая делает то же самое, но идентичная таблица в / closed-stores работает последовательно (я обновлял десятки раз встрока, чтобы попытаться сломать ее, и она не будет).

JS каждой из этих таблиц просто $('#table-id').Datatable();, но я оставлю это как его четко работающий, поэтому я считаю, что это мой Nginx.conf может быть, или что-то связанное с Django?

Также отмечу, что в консоли во всех сценариях есть 0 ошибок.

Nginx.conf

    server {
        listen       80 default_server;
        #listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://127.0.0.1:9001;
        }

        location /static {
                autoindex on;
                alias /home/usr/applications/it-database/static/;
}
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

Стоит отметить, что эти таблицы прекрасно работали без единой проблемы в течение почти 2 месяцев с моего сервера разработки Windows Server 2016, но при переходе на CentOS это начало происходить.Я включил это только потому, что совершенно не представляю, в чем может быть проблема.


Обновление 1: После небольшого осмотра я обнаружил, что проблема заключается в том, что для одногопричина или другой мой контекст данные каким-то образом обрезаются.Если я указываю номер порта, мне выдаются все полные данные, поэтому таблицу можно преобразовать в таблицу данных, но если я не укажу номер порта, данные будут обрезаны в Store 386 (иногда больше, иногда меньше, всегда в этой области).

enter image description here

Я вижу, что в некоторых версиях Chrome доступ к конечной точке /stores/выдаст ошибку net::ERR_CONTENT_LENGTH_MISMATCH.Многие говорили, что в предыдущих версиях это было связано с заказами промежуточного программного обеспечения, но с тех пор было решено.

Мое промежуточное ПО:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

/ stores / view:

@login_required
def stores(request):
    stores = Store.objects.exclude(street_address__contains="closed").all()
    context = {
        'stores':stores,
    }
    return render(request, 'all_stores.html', context)

Шаблоны магазинов:

{% extends 'base.html' %}
{% block title %} All Stores - Stores Database {% endblock %}
{% block body %}
<br>

<div class="flex_container">
    <h2>Store Database</h2>

    <div class="table_header" style="float: left; position: relative;">
        <br>
        <h4>All Locations</h4>
    </div>

    <table id="store-table" class="table-striped table-hover">
        <thead class="thead-light">
            <tr>
                <th>Store #</th>
                <th>Name</th>
                <th>Phone</th>
                <th>City</th>
                <th>State</th>
                <th>Zip Code</th>
                <th>Circuit</th>
            </tr>
        </thead>

        <tbody>
            {% for store in stores %}
            <tr id="table-row">
                <td><a href="/stores/{{ store.pk }}">{{ store.store_number }}</a></td>
                <td><a href="/stores/{{ store.pk }}">{{ store.name }}</a></td>
                <td>{{ store.phone }}</td>
                <td>{{ store.city }}</td>
                <td>{{ store.state }}</td>
                <td>{{ store.postal }}</td>
                <td>
                    {% for circuit in store.circuit_set.all %}
                    <p>{{ circuit.circuit_id }}</p>
                    {% endfor %}
                </td>
            </tr>

            {% endfor %}
        </tbody>
    </table>
    <script>
        $(document).ready(function () {
            $('#store-table').DataTable();

        });
    </script>

    {% endblock %}

1 Ответ

0 голосов
/ 27 февраля 2019

Проблема здесь не обязательно связана с Django, а связана с тем, как Nginx обрабатывает прокси с доставкой статического контента.Когда вы настраиваете proxy_pass для статических файлов, вам необходимо убедиться, что у вашего пользователя nginx есть доступ к /lib/nginx/proxy_tmp.Могут быть и другие жизненно важные каталоги, к которым вашему пользователю также необходим доступ, поэтому я просто передал право собственности на весь каталог /lib/nginx.

Причина, по которой он будет указывать при указании порта, заключается в том, что я обращался к своему Gunicorn /Приложение Django напрямую, без прокси через Nginx, поэтому этот каталог прокси не имеет значения в этом сценарии.

...