Ravindra BagaleCourses & study guides

Chapter 7: Static Website Hosting (3 OSes × 2 Web Servers)

7.6 Combination 1 — Amazon Linux 2023 + Nginx

sudo yum install -y nginx
sudo service nginx start
sudo systemctl enable nginx

sudo tee /etc/nginx/conf.d/mysite.conf > /dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name YOUR_SERVER_NAME;
    root /var/www/mysite;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;

    access_log /var/log/nginx/mysite_access.log;
    error_log  /var/log/nginx/mysite_error.log;
}
EOF

# put this server's public IP (or your domain) as server_name
sudo sed -i "s/YOUR_SERVER_NAME/$(curl -s https://checkip.amazonaws.com)/" /etc/nginx/conf.d/mysite.conf
sudo nginx -t && sudo service nginx reload
curl -s http://localhost -H "Host: $(curl -s https://checkip.amazonaws.com)" | head -5

Open http://<PUBLIC_IP> in your browser.

Why server_name = public IP here?

Amazon Linux and CentOS already have a default server { server_name _; } block inside /etc/nginx/nginx.conf that serves /usr/share/nginx/html. Giving our block the exact public IP (or a domain like mysite.example.com) makes Nginx pick our block when the browser asks for that host. If you later attach an Elastic IP or a domain, update server_name and reload. Quick method instead: simply copy your files into /usr/share/nginx/html/ — no config needed.