Директива карты здесь не разрешена

Я очень новичок во всем этом, так что, пожалуйста, держись со мной. Я следую этому уроку https://medium.com/startup-founder-panel/deploying-a-meteor-app-with-nginx-from-scratch-1332b32e99a5 Когда я делаю sudo nginx -tя получил

nginx: [emerg] "map" directive is not allowed here in /etc/nginx/sites-enabled/app:2
nginx: configuration file /etc/nginx/nginx.conf test failed

Вот файл приложения

# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
}
# HTTP
server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        location = /favicon.ico {
          root /home/USERNAME/portal/programs/web.browser/app;
          access_log off;
        }
        location ~* "^/[a-z0-9]{40}\.(css|js)$" {
          gzip_static on;
          root /home/USERNAME/portal/programs/web.browser;
          access_log off;
        }
        location ~ "^/packages" {
          root /home/USERNAME/portal/programs/web.browser;
          access_log off;
        }
        # pass requests to Meteor
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade; #for websockets
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
        }
}

А вот и nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

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

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##
        include /etc/nginx/mime.types;
        gzip on;
        gzip_disable "msie6";
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml applicatio
n/xml+rss text/javascript;
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}
#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
# 
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
include /etc/nginx/sites-enabled/*;

Так в чем проблема? Заранее спасибо!

4 ответа

Попробуйте добавить это в ваш nginx.conf в http {}:

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;

    events {
            worker_connections 768;
            # multi_accept on;
    }

    http {
            # this section is needed to proxy web-socket connections
            map $http_upgrade $connection_upgrade {
                    default upgrade;
                      ''      close;
            }

            ##
            # Basic Settings
            ##

            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            # server_tokens off;

            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;

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

            ##
            # SSL Settings
            ##

            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;

            ##
            # Logging Settings
            ##

            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;

            ##
            # Gzip Settings
            ##
            include /etc/nginx/mime.types;
            gzip on;
            gzip_disable "msie6";
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml applicatio
    n/xml+rss text/javascript;
            ##
            # Virtual Host Configs
            ##
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    #mail {
    #       # See sample authentication script at:
    #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    # 
    #       # auth_http localhost/auth.php;
    #       # pop3_capabilities "TOP" "USER";
    #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    # 
    #       server {
    #               listen     localhost:110;
    #               protocol   pop3;
    #               proxy      on;
    #       }
    # 
    #       server {
    #               listen     localhost:143;
    #               protocol   imap;
    #               proxy      on;
    #       }
    #}
    include /etc/nginx/sites-enabled/*;

Причина, по которой это не работает, заключается в том, что вы не добавили модуль карты в блок http. Согласно документации Nginx, модуль map можно использовать только в контексте http. Пожалуйста, смотрите документацию Nginx:

http://nginx.org/en/docs/http/ngx_http_map_module.html

Почему сайты с поддержкой включены в ваш файл nginx.conf дважды?

include /etc/nginx/sites-enabled/*;

Вышеупомянутая строка присутствует в двух местах файла conf:

  • внутри блока http
  • В последней строке файла за пределами блока http

Может быть, второй вызывает проблему, поскольку он добавит директиву map из файла приложения за пределы блока http.

Если нет особой цели добавления этой строки включения дважды, вы можете удалить вторую строку, и это может решить проблему.

Инструкции, которым вы следовали, предполагали, что у вас нет этой строки include /etc/nginx/sites-enabled/*; в вашем nginx.conf, Некоторые пакеты поставляются с этим включенным по умолчанию nginx.conf файл. У вас есть это здесь, в вашем файле, что совершенно нормально.

        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

Удалить include /etc/nginx/sites-enabled/*; в самом низу файла, так как у вас уже есть строка в nginx.conf, и она (в нижней части файла) в любом случае находится в неправильном месте, так как ее внешняя сторона http { } блок.

В 2021 году вы можете обновить nginx до последней версии, чтобы исправить эту проблему. У меня была эта ошибка с версией 1.10 в Debian 9, после обновления nginx до 1.18 она была исправлена.

Другие вопросы по тегам