Перейти к содержанию

cors: Это реализация CORS в nginx-module-lua

Установка

Если вы еще не подписались на RPM репозиторий, зарегистрируйтесь. После этого вы можете продолжить с следующими шагами.

CentOS/RHEL 7 или Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-cors

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-cors

Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.

Этот документ описывает lua-resty-cors v0.2.1, выпущенную 17 октября 2016 года.


Это реализация CORS на OpenResty, и она переносит nginx-http-cors в OpenResty.

Использование

Он должен быть размещен на фазе заголовка вывода nginx. В OpenResty это должно быть header_filter_by_lua*. Конфигурация должна выглядеть следующим образом:

http {
      header_filter_by_lua_block {
        local cors = require('lib.resty.cors');

        cors.allow_host([==[.*\.google\.com]==])
        cors.allow_host([==[.*\.facebook\.com]==])
        cors.expose_header('x-custom-field1')
        cors.expose_header('x-custom-field2')
        cors.allow_method('GET')
        cors.allow_method('POST')
        cors.allow_method('PUT')
        cors.allow_method('DELETE')
        cors.allow_header('x-custom-field1')
        cors.allow_header('x-custom-field2')
        cors.max_age(7200)
        cors.allow_credentials(false)

        cors.run()
    }
}

API

allow_host

syntax: cors.allow_host(host)

Это будет соответствовать хосту из запроса cors и будет добавлено в заголовок Access-Control-Allow-Origin следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Allow-Origin: http://www.google.com

expose_header

syntax: cors.expose_header(header)

Это будет добавлено в заголовок Access-Control-Expose-Headers следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Expose-Headers: x-custom-field1,x-custom-field2

allow_method

syntax: cors.allow_method(method)

Это будет добавлено в заголовок Access-Control-Allow-Methods следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Allow-Methods:GET,POST,PUT

allow_header

syntax: cors.allow_header(header)

Это будет добавлено в заголовок Access-Control-Allow-Headers следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Allow-Headers:x-custom-field1,x-custom-field2

max_age

syntax: cors.max_age(age)

Это будет добавлено в заголовок Access-Control-Max-Age следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Max-Age: 7200

Allow-Credentials

syntax: cors.allow_credentials(true or false)

Это будет добавлено в заголовок Access-Control-Allow-Credentials следующим образом:

Request:
Origin: https://www.google.com

Response:
Access-Control-Allow-Credentials: true

run

syntax: cors.run()

Это точка входа для lua-resty-cors.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-cors.