---
obj: application
website: https://nginx.org
repo: https://hg.nginx.org/nginx
---
# nginx
Nginx is a powerful open-source web server and reverse proxy server. It is widely used for serving static content, handling dynamic content through various modules, and acting as a load balancer.

## Docker Compose
```yml
version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./nginx-custom.conf:/etc/nginx/conf.d/custom.conf:ro
    restart: always
```

## Configuration
Nginx's configuration is defined in the `/etc/nginx/nginx.conf` file.

### Server Blocks (Virtual Hosts)
Nginx uses server blocks to define different virtual hosts. Each server block can have its own configuration, allowing Nginx to serve multiple websites on the same server.

Example of a basic server block:
```nginx
server {
    listen 80;
    listen 443 ssl;

    ssl_certificate     certs/example.com.crt;
    ssl_certificate_key certs/example.com.key;

    server_name example.com www.example.com;

    location / {
        root /var/www/example;
        index index.html;
    }

    # Additional configuration can go here
}
```

In this example:
- `listen`: Specifies the port on which Nginx will listen for incoming requests.
- `server_name`: Defines the [domain](../../internet/Domain.md) names for this server block.
- `location`: Configures how Nginx processes requests for the specified location.

### Locations
The location directive is used to configure how Nginx handles different types of requests. It can be used for [URL](../../internet/URL.md) matching, proxying, and more.

Example of a location block:
```nginx
location /images/ {
    alias /var/www/example/images/;
    expires 30d;
    add_header Cache-Control "public, max-age=2592000";
}
```

In this example:
- `alias`: Maps a location to a filesystem path.
- `expires`: Sets the cache expiration for the specified location.
- `add_header`: Adds custom [HTTP](../../internet/HTTP.md) headers to the response.

### Reverse Proxy
Nginx can act as a reverse proxy to forward requests to other servers.

Example of a reverse proxy configuration:
```nginx
location /app/ {
    proxy_pass http://backend-server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
```

In this example:
- `proxy_pass`: Specifies the backend server's address.
- `proxy_set_header`: Sets custom headers for the proxy request.
