Skip to content
Advertisement

How to modify the port of https(http) URL?

Originally, I have a website with nginx and Ubuntu 20.04 port at 80(http) and 443(https), the URL is https://mysite.cc (It works well)

And now, I want to set another site with Spring Cloud (Docker) with the URL https://new.mysite.cc

How to set the nginx or the docker of Spring cloud?

Right now, all of the two sites can separatly work well, but how to integrate with them together in one Ubuntu server?

The config of nginx of https://mysite.cc is:

server {
    server_name mysite.cc;  

    root /var/www;
    
    index index.html index.htm index.nginx-debian.html;
        
    location / {
        
        try_files $uri $uri/ /index.html;
    }
    
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mysite.cc/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mysite.cc/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = mysite.cc) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    listen [::]:80;

    server_name mysite.cc;
    return 404; # managed by Certbot
}

The new site is docker with spring cloud, the part of config file docker-compose.yml is like: (Right now, it works at http://localhost)

version: "3"
services:      
  newsite-nacos:
    image: nacos/nacos-server:1.4.2
    container_name: newsite-nacos
    restart: always    
   
    ports:
      - ${NACOS_PORT:-8848}:8848
    healthcheck:
      test: curl -f http://${NACOS_HOST:-172.20.0.4}:8848/nacos/index.html || exit 1
      interval: 6s
      timeout: 10s
      retries: 10
    networks:
      newsite-network:
        ipv4_address: ${NACOS_HOST:-172.20.0.4}
    
  newsite-backend:
    ......................
    ports:
      - ${BACKEND_PORT:-6688}:${BACKEND_PORT:-6688}
    networks:
      newsite-network:
        ipv4_address: ${BACKEND_HOST:-172.20.0.5}
  
  newsite-frontend:
    image: ...........
    container_name: newsite-frontend
    restart: always    
    environment:
      - SERVER_NAME=localhost 
      - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} 
      - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} 
      - USE_HTTPS=false 
    ports:
      - "80:80"
      - "443:443"
    networks:
      newsite-network:
        ipv4_address: 172.20.0.6
  
networks:
   newsite-network:
     driver: bridge
     ipam:
       config:
         - subnet: ${SUBNET:-172.20.0.0/16}

Advertisement

Answer

You can setup another server block in your nginx configuration to make it work as a proxy.

You should also change exposed ports for the dockerized application not to collide with the first one.

So change this:

    ports:
      - "80:80"
      - "443:443"

Into for example this:

    ports:
      - "8088:80"

Proxied communication on one machine doesn’t need to be enciphered as the https config would be set up on the proxy (nginx)

Then the server block could look similarly as this:

server {

    server_name new.mysite.cc;  

    location / {
        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;                               

        // the port has to match the exposed one of the spring app                                                                
        proxy_pass http://127.0.0.1:8088; 
        proxy_read_timeout 90;                                                 
    }
    
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mysite.cc/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mysite.cc/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

I am not mentioning obtaining of the TLS certificate, as you managed to do that for the first application and the process is equal.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement