Joeeee
Joeeee

Reputation: 1266

nginx: [emerg] unknown directive "set" in /usr/local/nginx/conf/nginx.conf:43

I comiled nginx like to enable push module(http://pushmodule.slact.net/) to implements nginx comet server.

When I am trying to restart i get: nginx: [emerg] unknown directive "set" in /usr/local/nginx/conf/nginx.conf:43

Here my conf:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

    location /publish {
        # Название переменной с идентификатором канала
        # в нашем примере "cid", т.е. запрос будет таким:
        # http://example.com/publish?cid=s42378fwe
        set $push_channel_id $arg_cid;
        push_publisher;

        # Отключаем хранение очереди (сообщение удаляется после доставки)
        push_store_messages off;
    }

    location /listen {
        push_subscriber;

        # Обслуживать только первого "слушателя"
        # Остальным отправляем 403
        push_subscriber_concurrency first;

        # Идентификатор канала
        set $push_channel_id $arg_cid;

        # Тип ответа
        default_type text/plain;
    }


        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

System: ubuntu 10.10 x86. Can anyone help me please?

Upvotes: 0

Views: 24920

Answers (2)

Yahya Yahyaoui
Yahya Yahyaoui

Reputation: 2953

The default nginx doesn't support ""HttpRewriteModule which defines the "set" directive"" , you have to compile, install and use nginx from source: - Download nginx source from here

  • cd to the directory containing the downloaded file
  • uncompress it: tar xvfz nginx-"your_version"
  • cd nginx-"your_version"
  • ./configure :you can add other modules to the compilation of nginx in this way:

./configure --with-"the module_to_add" you can get rid of some modules in this way:

./configure --without-"the module_to_not_include"

for example the module "http_rewrite_module" requires “pcre” and “pcre-devel” either install them or exclude it from compilation (./configure --without-http_rewrite_module)

for ssl module : ./configure --with-http_ssl_module

  • make
  • sudo make install

After new nginx installed, we have to use it instead of the default one: The Binary of the new nginx is in:

/usr/local/nginx/sbin (you can try run it from there)

  • Change init.d to use the new nginx:

sudo nano /etc/init.d/nginx

locate these two lines:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx

whether change them to these:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin
DAEMON=/usr/local/nginx/sbin/nginx

or I suggest comment the old ones and add the new ones, so you get finally:

#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin
#DAEMON=/usr/sbin/nginx
DAEMON=/usr/local/nginx/sbin/nginx

(after modification, to save and quit nano, press (Ctrl+O) then press (Enter) then press (Ctrl+x))

back up your old nginx configurations to the new nginx if any (copy paste nginx.conf)

set up configuration:

cd /usr/local/nginx/sbin

sudo ./nginx -t -c /usr/local/nginx/conf/nginx.conf

restart nginx:

sudo /etc/init.d/nginx restart

or you can reboot your os instead of the last tow instructions. Now nginx support "set" directive. Hope this helps.

Upvotes: 3

Brandon
Brandon

Reputation: 2604

The error is because nginx doesn't know about the command "push_publisher" in the location /publish block. The push module is not part of the build that your particular nginx is running.

Did you download and compile the module with nginx and install the newly compiled nginx to the default location in Ubuntu?

Since your nginx.conf file located at /etc/nginx I would guess that you are running the default nginx from aptitude (sudo apt-get install nginx) that does not include the push module. Download and install nginx from source with the push module included and it should work. Install it to a directory like "/opt/nginx" that you create so you know you aren't just running the OS default package.

Upvotes: 4

Related Questions