Web server trên Máy tính bảng đơn

Định nghĩa

Máy chủ web (tiếng Anh: Web server) dùng để chỉ phần mềm để tạo ra một máy chủ, hoặc phần cứng dành riêng để chạy các phần mềm hoặc trang web của máy chủ, để từ đó có thể cung cấp các dịch vụ World Wide Web. Một máy chủ web xử lý các yêu cầu từ các client (trong mô hình server - client) thông qua giao thức HTTP và một số giao thức liên quan khác.

Máy chủ web

Để truy cập một trang web hay ứng dụng chúng ta sẽ trải qua các quá trình sau đây.

Quá trình truyền tải thông tin giữa máy khách và máy chủ có thể qua nhiều máy trung gian gọi là proxy.

Một vài phần mềm máy chủ web

Và nhiều phần mềm máy chủ khác nữa. Bạn có thể tham khảo thêm tại đây.

Ở đây chúng tôi sẽ sử dụng Caddy vì cấu hình Caddyfile khá đơn giản dễ hiểu. Caddy cũng có thể làm Reverse Proxy hoặc HTTP server.

Caddy - Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS.

Mô hình

HTTP Server → Proxy Server → Router → CloudFlare → Máy khách.

  1. HTTP server: Nginx chạy web tĩnh hoặc web động như Wordpress, Joomla..
  2. Proxy server: Caddy chạy reverse proxy về các ứng dụng HTTP trong mạng nội bộ, Caddy listen ở port 80 và 443 để tự động đăng ký Chứng chỉ SSL/TLS, phục vụ ở giao thức HTTPS.
  3. Router: NAT port 80/443 về IP máy chủ nội bộ
  4. Cloudflare: Proxy lưu lượng qua Cloudflare để bảo vệ máy chủ của bạn, cập nhật Dynamic DNS trong trường hợp bạn không có IP tĩnh.

Thiết bị

Phần mềm

Do Orange Pi Zero 3 hỗ trợ Docker và kiến trúc ARM64 khá phổ biến nên chúng tôi sẽ triển khai bằng Docker.

Triển khai

Router OPNSense

Mở port IPv6 80 / 443.

Dưới đây là ví dụ cho IPv6 port 80 ( rủi ro bảo mật khi mở port cho tất cả các thiết bị).

Firewall → Rules → WAN → Add (Orange Plus Icon)

Các tùy chọn khác có thể để mặc định.

IPv6 Port 443 các bước tương tự.

Orange Pi Zero 3

Video quá trình

https://youtu.be/aNjhcn0bduw?si=Vhp6G9KUlI_fxl6p

Caddy Reverse Proxy

Reverse proxy quick-start.

services:
  caddy:
    image: caddy:2.7
    container_name: caddy
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./site:/srv
      - ./caddy_data:/data
      - ./caddy_config:/config
networks:
  default:
    name: pico
    external: true

docker-compose.yml

john.io.vn {
	reverse_proxy httpd:80
}

Caddyfile

Web tĩnh đơn giản HTTP

Docker Apache HTTP Server.

services:
  httpd:
    image: httpd:2.4
    container_name: httpd
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./htdocs:/usr/local/apache2/htdocs
networks:
  default:
    name: pico
    external: true

docker-compose.yml

Cloudflare DDNS

Cloudflare Dynamic DNS.

godns Cloudflare

GoDNS Configuration Cloudflare.

services:
  godns:
    image: timothyye/godns:latest
    container_name: godns
    restart: always
    volumes:
      - ./config.json:/config.json
    network_mode: host

docker-compose.yml

{
  "provider": "Cloudflare",
  "login_token": "API TOKEN CLOUDFLARE CUA BAN TAI DAY",
  "domains": [
    {
      "domain_name": "john.io.vn",
      "sub_domains": ["@"]
    }
  ],
  "resolver": "2001:4860:4860::8888",
  "ipv6_urls": ["https://ipv6.seeip.org"],
  "ip_type": "IPv6",
  "interval": 300,
  "socks5_proxy": ""
}

config.json

Lưu ý chỉnh config godns và router firewall cho đúng trong trường hợp sử dụng IPv4 như dưới đây.

Đặt IP tĩnh cho Orange Pi Zero 3.

Services → DHCPv4 → LAN → DHCP Static Mappings for this interface → Thêm MAC address và IP address.

NAT port 80, 443 về địa chỉ IP của Orange Pi Zero 3.

Dưới đây là ví dụ cho port 80.

Firewall → NAT → Port Forward → Add

Các thông tin khác có thể để mặc định.