# Nginx proxy
To set up an Nginx reverse proxy with Docker Compose and add basic authentication, you can follow these steps:
1. **Create a Docker Compose YAML file:**
Create a file named `docker-compose.yml` in your project directory and add the following content:
```yaml
version: '3'
services:
nginx-proxy:
image: nginx
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- proxy-net
your-app:
image: your-app-image
container_name: your-app-container
environment:
- VIRTUAL_HOST=yourdomain.com
networks:
- proxy-net
networks:
proxy-net:
driver: bridge
```
2. **Create an Nginx Configuration File:**
Create an `nginx.conf` file in the same directory as your `docker-compose.yml` and add the following content:
```nginx
events {}
http {
server {
listen 80;
location / {
proxy_pass http://your-app:your-app-port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /basic-auth {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://your-app:your-app-port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
```
Replace `your-app-image` with the name of your application's Docker image, and `yourdomain.com` with your actual domain. Replace `your-app-port` with the port your application listens to.
3. **Generate Basic Authentication Credentials:**
Run the following command to generate the `.htpasswd` file with a username and password for basic authentication:
```bash
docker run --rm -v $(pwd):/data clue/passy htpasswd -c /data/.htpasswd your_username
```
Replace `your_username` with the desired username. You will be prompted to enter a password for the user.
4. **Start the Services:**
In the project directory, run the following command to start the services:
```bash
docker-compose up -d
```
This will start the Nginx reverse proxy and your application in the background.
Now, your Nginx proxy is configured to route requests to your application and enforce basic authentication for the `/basic-auth` path. Accessing `http://yourdomain.com/basic-auth` will prompt you for the username and password you set up earlier.
```
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://your-app-server:your-app-port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://your-admin-app-server:your-admin-app-port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /api {
proxy_pass http://your-api-server:your-api-port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Add more location blocks as needed
location /static {
alias /path/to/static/files;
}
location /uploads {
alias /path/to/uploaded/files;
}
# Add additional location blocks for static files, uploads, etc.
}
```
https://stackoverflow.com/questions/56390226/how-to-add-extra-hosts-entries-in-helm-charts