как заставить Nginx переопределить заголовок?

Я пытаюсь отобразить свои карты сайта. Браузеры отображают мой индекс карты сайта как xml, но обрабатывают карты сайта публикаций как простой текст.

Я попытался переопределить тип контента с помощью приведенной ниже конфигурации, но это не помогло.

location ~ \.xml$ {
    proxy_hide_header Content-Type;
    add_header Content-Type "application/xml";
}

Как мне заставить nginx установить тип контента как «application / xml»?

Между прочим, карты сайта в двух словах ..

индекс карты сайта

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <sitemap>
        <loc>http://www.example.com/sitemaps/sitemap-1.xml</loc>

        <lastmod>2019-02-10T12:22:18+00:00</lastmod>
    </sitemap>
    ....
</sitemapindex>

и одна из карт сайта сообщений

<loc>http://www.example.com/en</loc>
    <xhtml:link rel="alternate" hreflang="en" href="http://example.com/en" />
    <xhtml:link rel="alternate" hreflang="fr" href="http://example.com/fr" />
    <lastmod>2019-02-10T00:00:00+00:00</lastmod>
    <changefreq>daily</changefreq>
    <priority>1</priority>
</url>
<url>
.....

Я использую laravel конфигурацию nginx по умолчанию

3
задан 12 February 2019 в 22:02
1 ответ

На самом деле вы не можете установить заголовок Content-Type для содержимого proxy_passed с использованием простого nginx. Вам необходимо скомпилировать его с помощью headers-more-nginx-module для этой функциональности. После того, как вы получили этот модуль, настроить заголовки так же просто, как:

location ~ \.xml$ {
    ... your config ...
    more_set_headers "Content-Type: application/xml";
    ... proxy_pass settings ...
}

В качестве альтернативы, если эти ваши файлы карты сайта на самом деле не генерируются внутренним сервером на лету и они действительно существуют в папке вашего веб-сайта, вам действительно не нужно использовать proxy_pass . Попробуйте обслуживать их напрямую с помощью nginx:

location ~ \.xml$ {
    try_files $uri =404;
}

Если вы не знаете, как скомпилировать свой nginx с внешним модулем в Ubuntu 18, просто выполните следующие простые шаги:

  1. Станьте суперпользователем с помощью этой команды, чтобы мы могли пропустить ввод sudo каждый раз:

    sudo su

  2. Установите предварительные условия для сборки nginx с помощью следующей команды:

    apt install -y build-essential git tree libpcre3-dev libssl-dev zlib1g-dev libxslt1 -dev libgd-dev libgeoip-dev

  3. Загрузите последний исходный код nginx с http://nginx.org/en/download.html

    wget http://nginx.org/download/nginx-1.15. 8.tar.gz

  4. Распакуйте его и войдите в каталог исходного дерева

    tar xzfv nginx-1.15.8.tar.gz && cd nginx-1.15.8

  5. Получите headers-more-nginx -module :

    git clone https://github.com/openresty/headers-more-nginx-module

  6. Получить аргументы конфигурации установленного вами nginx (запустив nginx -V ) добавьте - add-module = / path / to / headers-more-n ginx-module или просто настройте с помощью следующей команды:

    ./ configure --with-cc-opt = '- g -O2 -fstack-protector-strong -Wformat -Werror = format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE = 2 '--with-ld-opt =' - Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, now -fPIC '--user = www- данные --group = www-data --prefix = / etc / nginx --conf-path = / etc / nginx / nginx.conf --sbin-path = / usr / sbin / nginx --http-log-path = /var/log/nginx/access.log --error-log-path = / var / log / nginx / error.log --lock-path = / var / lock / nginx.lock --pid-path = / run /nginx.pid --modules-path = / usr / lib / nginx / modules --http-client-body-temp-path = / var / lib / nginx / body --http-fastcgi-temp-path = / var / lib / nginx / fastcgi --http-proxy-temp-path = / var / lib / nginx / proxy --http-scgi-temp-path = / var / lib / nginx / scgi --http-uwsgi-temp- путь = / var / lib / nginx / uwsgi --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_dav_module -http_sl ice_module --with-Threads --with-http_addition_module --with-http_geoip_module = dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module = dynamic --with-http_sub_module --wltwith-httpmodule -stream = dynamic --with-stream_ssl_module --with-mail = dynamic --with-mail_ssl_module --add-module =. / headers-more-nginx-module

  7. make && make install

  8. Теперь у вас есть headers-more-nginx-module в вашей системе и полная поддержка этих конфигурационных директив, о чем я упоминал ранее.

0
ответ дан 3 December 2019 в 07:49

Теги

Похожие вопросы