Skip to content
Snippets Groups Projects
README.md 2.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Nginx simple reverse proxy example
    
    References:
    - [Nginx documentation](https://nginx.org/en/docs/)
    - [Nginx beginner's guide](https://nginx.org/en/docs/beginners_guide.html)
    
    
    ## Quick start
    
    Be sure to have [`docker-compose.yml`](./docker-compose.yml) and [`nginx.conf`](./nginx.conf) inside your current working directory.
    
    ```bash
    # start nginx and plantuml server
    docker-compose up -d
    
    # stop nginx and plantuml server
    docker-compose down
    ```
    
    Check with `docker ps` if both container are up and running:
    
    ```
    $ docker ps
    CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS         PORTS                               NAMES
    217e753a0dcf   plantuml/plantuml-server:jetty   "/entrypoint.sh"         4 seconds ago   Up 3 seconds   8080/tcp                            plantuml-server
    9b1290c100f5   nginx:alpine                     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx
    ```
    
    Open [http://localhost](http://localhost) inside your browser.
    YEAH! You are now using PlantUML behind a simple Nginx reverse proxy.
    
    
    ## Nginx configuration
    
    ```nginx
    ...
    
    # PlantUML
    location / {
        proxy_set_header  HOST               $host;
        proxy_set_header  X-Forwarded-Host   $host;
        proxy_set_header  X-Forwarded-Proto  $scheme;
    
        proxy_pass http://plantuml-server:8080/;
    }
    
    ...
    ```
    
    - `location /` to reverse complete server
    - `proxy_set_header HOST $host` and `proxy_set_header X-Forwarded-Host $host` to replaces local plantuml server ip with FQDN
    - `proxy_set_header X-Forwarded-Proto $scheme` to use reverse proxy protocol schema instead of communication schema between reverse proxy and plantuml server
    - `proxy_pass http://plantuml-server:8080/` to set reverse proxy path to plantuml server.
      Use the docker container name `plantuml-server` instead of ip addresses.
    
    
    ## Nginx and PlantUML server
    
    ```yaml
    version: "3"
    
    services:
      plantuml-server:
        image: plantuml/plantuml-server:jetty
        container_name: plantuml-server
        environment:
          - TZ="Europe/Berlin"
    
      nginx:
        image: nginx:alpine
        container_name: nginx
        ports:
          - "80:80"
        environment:
          - TZ="Europe/Berlin"
        volumes:
          - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ```
    
    - Set `container_name` to use them instead of e.g. ip addresses
    - Set the environment `TZ` the ensure the same timezone.
      For example to server timezone (`cat /etc/timezone`)?
    - plantuml-server
      * plantuml-server already exposes port `8080` to it's own local network (but not outside).
        Since plantuml-server and nginx are sharing a network, nginx can reach plantuml-server without further settings.
    - nginx
      * open/link port `80` to the outside
      * `./nginx.conf:/etc/nginx/nginx.conf:ro` to use your own Nginx configuration (readonly)
    
    
    ## Useful commands
    
    ```bash
    # see whats going on inside your docker containers
    docker logs --tail 50 --follow --timestamps nginx
    docker logs --tail 50 --follow --timestamps plantuml-server
    ```