2

I have a problem when I try to use the stream or mail directive with nginx. I'm using nginx/1.16.1 & Ubuntu 18.04.4 LTS.
This is my nginx.conf

user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 1200; # 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 off; #/var/log/nginx/access.log; error_log /var/log/nginx/error_website.log; ## # Gzip Settings ## gzip on; # 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 application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.websiteconf; include /etc/nginx/sites-enabled/*.websiteconf; } 

And I want to use the "stream" directive in one of my site configs (test.streamconf)

stream { server { listen 500 udp; proxy_pass test.com:500; } server { listen 4500 udp; proxy_pass test.com:4500; } } 

But if I create a symlink for the sites-enabled folder and test my configuration with "sudo nginx -t", I get the following error message:

nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/test.streamconf:1
nginx: configuration file /etc/nginx/nginx.conf test failed

The stream and mail module is already installed... enter image description here

What do I wrong?

4
  • Look at the include directives in your nginx.conf file. You have written stream { stream { server { ... } } }. You have nested two stream directives. See my answer here which relates to the http directive, but the same applies to the stream and mail directives, as all three are at the top block level. Commented Mar 2, 2020 at 10:13
  • Stefan, Did you installed stream and mail module as a sudo user or a normal user ? It might be you are not able to load modules as a sudo user. Commented Mar 2, 2020 at 20:02
  • @RichardSmith, I have adapted (removed the stream directive) in the nginx.conf, but without success. Commented Mar 2, 2020 at 20:11
  • @InderRSingh: What do you mean exactly? I have installed the nginx, with "sudo apt install nginx". I haven't installed the stream and mail module separate. Commented Mar 2, 2020 at 20:14

1 Answer 1

7

Okay, now I get it. nginx loads the individual configurations nested.
I have now added the following alls root to nginx.conf:

user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 1200; # 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 off; #/var/log/nginx/access.log; error_log /var/log/nginx/websiteerror.log; ## # Gzip Settings ## gzip on; # 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 appl$ ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.websiteconf; include /etc/nginx/sites-enabled/*.websiteconf; } stream { access_log off; error_log /var/log/nginx/streamerror.log; include /etc/nginx/conf.d/*.streamconf; include /etc/nginx/sites-enabled/*.streamconf; } 

And my "stream" config file now looks like this (I thought that I have to start with "stream" here too)...

server { listen [::]:4500 ipv6only=off; listen [::]:500 ipv6only=off; proxy_pass server_name.com:$server_port; proxy_protocol on; } 
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! And the tricky part is also to change include /etc/nginx/sites-enabled/*; in the http { ... } block. I used include /etc/nginx/sites-enabled/*.conf; and include /etc/nginx/sites-enabled/*.streamconf;, for systematic separation.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.