Home > database >  AWS EC2 instance - Nginx returns 403 forbidden
AWS EC2 instance - Nginx returns 403 forbidden

Time:11-02

Im trying to setup nginx but it seems nginx does not have permissions to do what it has to.

I'm running an EC2 instance the delivers a React frontend with a Node.js backend.

/var/log/nginx/error.log:

2022/11/01 02:01:24 [error] 2426#2426: *4 "/home/ubuntu/apps/myapp-frontend/index.html" is forbidden (13: Permission denied), client: the.client.ip, server: the.server.ip, request: "GET / HTTP/1.1", host: "the.server.ip"

The only thing I changed in nginx.conf (because it is the correct owner of the directory):

user ubuntu;

I check owner like this:

sudo ls -l /home/ubuntu/apps/myapp-frontend/

and get:

total 1960
-rw-rw-r--    1 ubuntu ubuntu      21 Oct 31 20:28 README.md
drwxrwxr-x 1096 ubuntu ubuntu   36864 Oct 31 20:37 node_modules
-rw-rw-r--    1 ubuntu ubuntu 1431930 Oct 31 20:29 package-lock.json
-rw-rw-r--    1 ubuntu ubuntu    1203 Oct 31 20:28 package.json
drwxrwxr-x    2 ubuntu ubuntu    4096 Oct 31 20:28 public
-rw-rw-r--    1 ubuntu ubuntu   30795 Oct 31 20:28 react-jwt-authentication-flow.png
-rw-rw-r--    1 ubuntu ubuntu   17260 Oct 31 20:28 react-jwt-authentication-project-overview.png
drwxrwxr-x    6 ubuntu ubuntu    4096 Oct 31 20:28 src
-rw-rw-r--    1 ubuntu ubuntu  462013 Oct 31 20:29 yarn.lock

/etc/nginx/sites-available/myserver (this is ALL of it):

server {
        listen 80;
        listen [::]:80;
        root /home/ubuntu/apps/myapp-frontend;
        index index.html index.htm index.nginx-debian.html;
        server_name website.ip.address;
        location / {
                try_files $uri $uri/ =404;
                   }
        location /api {
            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
           }
}

Any idea of what I'm doing wrong?

SELinux is disabled.

EDIT: As you can see, there is no index.html file in the React app folder, but this is how it is built and works well locally.

CodePudding user response:

you will have to run npm run build first, then point the nginx in to the newly created build directory

server {
        listen 80;
        listen [::]:80;
        root /home/ubuntu/apps/myapp-frontend/*build*;
        index index.html index.htm index.nginx-debian.html;
        server_name website.ip.address;
        location / {
                try_files $uri $uri/ =404;
                   }
        location /api {
            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
           }
}

  • Related