--- 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.