3

I'm trying to configure nginx on AWS Linux. I can get it working for one site, but when I try to add another I continually receive the following error:

nginx: [crit] pread() "/home/ec2-user/public/sites/example.com" failed (21: Is a directory)

This is my nginx.conf:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    include             /home/ec2-user/public/sites/*;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost example.es www.example.es;
        root         /home/ec2-user/public/sites/es-example;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

    server {
        listen       80;
        listen       [::]:80;        
        server_name  example.com www.example.com;
        root         /home/ec2-user/public/sites/en-example;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

Both directories example.com and example.es have an index.html. The permissions for both directories are as follows.

-rwxr-xr-x 1 ec2-user ec2-user

Any ideas? Thanks!

Thomas
  • 4,225
  • 5
  • 23
  • 28
David
  • 33
  • 1
  • 1
  • 3
  • You say the dirctories are named `example.com` and `example.es` yet in your config files they are named `es-example` and `en-example`. The names must be identical. – Sven Apr 21 '16 at 07:33

3 Answers3

7

The problem is with this line:

include             /home/ec2-user/public/sites/*;

The directive above is used by nginx to load/include additional configuration options. Only proper nginx configuration files should be placed under

/home/ec2-user/public/sites/

If you place there also directories or site (content) files nginx won't be able to include them. Please check the nginx documentation

http://nginx.org/en/docs/ngx_core_module.html#include

M.B.
  • 116
  • 3
0

This problem can also be solved by ensuring that the folowing line is not commented :

pid        logs/nginx.pid;
herve
  • 101
0

In my case, the same error occurred, but I discovered that inside the /etc/nginx/sites-enabled/ directory there was a directory... I just had to remove it for the problem to be solved. But that doesn't stop nginx from working, it just wouldn't read anything because it doesn't have any .conf file to read.