Proxy Docker Container dengan WSL dan NGINX di Windows

WSL mempermudah integrasi dengan aplikasi di Linux

Bervianto Leo Pratama
5 min readJul 6, 2023
Photo by frank mckenna on Unsplash

Latar Belakang

Nah, suatu saat saya mau buat proxy di Windows. Salah satunya menggunakan NGINX. NGINX menyediakan proxy di Windows yaitu ini:

Tetapi, langkah-langkah tersebut bisa saja memusingkan. Lalu, bagaimana kalau kita coba menggunakan WSL?

Post ini didedikasikan untuk melengkapi kelas Belajar Implementasi CI/CD dari Dicoding. Namun, tidak menutup kemungkinan bisa dilakukan untuk kasus yang umum.

Persiapan

  1. Sudah ada Docker Container yang sudah siap.
  2. WSL yang sudah siap.

Integrasi WSL dengan Docker

Oke, biar lancar. Kita perlu integrasi WSL dengan Docker. Saya asumsi Anda telah menggunakan Docker Desktop ya. Kalau belum, saya tidak menjelaskannya di sini.

  • Buka Docker Desktop. Klik Gear.
Gear Settings
  • Pastikan opsi WSL 2 ini sudah tercentang ya.
Opsi WSL
  • Klik ke Resources di sebelah kiri.
Resources
  • Klik WSL Integration dan pastikan “Enable integration” sudah tercentang dan yang additional juga sudah menyala untuk lebih pasti.
Centang integration

Install NGINX di WSL

Ini sebenarnya bergantung distronya ya. Saya asumsi sama dengan saya yaitu Ubuntu.

  • Mari kita update dulu.
sudo apt update
Update
  • Setelah berhasil, cukup install nginx dengan perintah berikut:
sudo apt install nginx
Install

Kebetulan karena saya sudah pernah menginstall maka akan diberitahu bahwa sudah terbaru.

  • Oke, saatnya konfigurasikan portnya. Saya akan edit default site. Edit file berikut “/etc/nginx/sites-available/default”. Update dengan konfigurasi seperti ini:
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
limit_req_zone $binary_remote_addr zone=one:10m rate=6r/m;

server {
listen 8081 default_server;
listen [::]:8081 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

# root /var/www/html;

# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#

Perhatikan!

Saya melakukan listen di port 8081 dan akan mengirimkannya ke port 8080. Kita juga mereplace page default NGINX.

  • Mari kita restart service nginx.
sudo service nginx restart
  • Pastikan sudah OK.
OK service

Alternatif

  • Jika masih tidak berjalan dengan baik, alias mendapatkan 502. Kamu bisa ganti localhost menjadi nilai dari nameserver berikut (sesuaikan dengan komputermu ya).
cat /etc/resolve.conf
resolve

Hasil

Hasilnya akan seperti ini.

Kedua port tersebut mengarah ke container yang sama. WSL sudah menyediakan fasilitas untuk bisa sharing port dengan mudah jadi cukup mudah untuk sharing aplikasi yang sedang berjalan. Namun perlu dicatat yaitu kamu perlu memastikan ingat port yang sudah dijalankan ya, biar tidak bingung kok tidak bisa dipakai.

Terima Kasih

Terima kasih sudah membaca. Semoga bermanfaat.

Photo by Alexas_Fotos on Unsplash

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Bervianto Leo Pratama
Bervianto Leo Pratama

Written by Bervianto Leo Pratama

Software Engineer | AWS Community Builder | HashiCorp Ambassador | Focus on Microservices and Cloud Computing

No responses yet

What are your thoughts?