Bir ECS örneği üzerinde çalışan Nginx ters proxy, Alibaba Cloud DNS'in yerel olarak desteklemediği iki özelliği sunar: HTTPS URL yönlendirmesi ve bağlantı noktası eşleme. Standart senaryolar için bunun yerine DNS kaydı ekleyin.
Kullanım durumları
Alibaba Cloud DNS şu sınırlamalara sahiptir:
Protokol kısıtlaması: DNS hizmeti SSL sertifikalarını yönetemediğinden
HTTPSüzerindenHTTPSURL yönlendirmesi desteklenmez.Bağlantı noktası sınırlaması: DNS, alan adlarını IP adreslerine çözümler; bağlantı noktalarına değil. Arka uç uygulamanız standart olmayan bir bağlantı noktasında (örneğin 3000) çalışıyorsa kullanıcıların URL'ye bağlantı noktasını eklemesi gerekir:
http://www.example.com:3000.
Çözüm mimarisi
Orijinal yol: İstemci, alan adını DNS aracılığıyla çözümler ve doğrudan arka uç hizmetinin IP adresine bağlanır.
-
Yeni yol: Nginx ters proxy ile istekler aşağıdaki yolu izler:
İstemci, alan adını DNS aracılığıyla çözümler ve DNS Nginx sunucusunun genel IP adresini döndürür.
İstemci, bu genel IP adresine HTTP veya HTTPS isteği gönderir.
Nginx,
Hostbaşlığını yönlendirme kurallarıyla eşleştirir ve isteği uygun arka uç hizmetine iletir.Arka uç isteği işler ve yanıtı Nginx üzerinden istemciye döndürür.
Yordam
Bu öğreticide Alibaba Cloud Linux 3 çalıştıran bir ECS örneği kullanılmaktadır. Nginx zaten dağıtılmışsa doğrudan 3. Adım: Farklı senaryolar için Nginx'i yapılandırın bölümüne geçin.
1. Adım: ECS ortamını hazırlayın
-
Bir ECS örneği oluşturun. Sihirbazı kullanarak örnek oluşturun.
İşletim sistemi: Alibaba Cloud Linux 3'ü seçin.
Ağ: Örneğe bir genel IP adresi atayın.
Güvenlik grubu gelen kuralı ekleyerek TCP protokolünde
22,80ve443bağlantı noktalarına izin verin.
2. Adım: Nginx'i yükleyin ve başlatın
SSH istemcisini kullanarak ECS örneğinde oturum açın.
-
Nginx'i yüklemek için aşağıdaki komutu çalıştırın.
sudo yum install -y nginx -
Nginx'i başlatın ve önyüklemede otomatik olarak başlamasını etkinleştirin.
sudo systemctl start nginx sudo systemctl enable nginx -
Nginx'in çalıştığını doğrulayın.
sudo systemctl status nginxDurum
active (running)ise hizmet başarıyla başlatılmış demektir. -
Bağlantıları kesmeden Nginx yapılandırmasını yeniden yükleyin.
sudo systemctl reload nginx
3. Adım: Farklı senaryolar için Nginx'i yapılandırın
Ana yapılandırma dosyası /etc/nginx/nginx.conf dosyasıdır. Önerilen yaklaşım, her site için /etc/nginx/conf.d/ dizinine ayrı bir .conf dosyası oluşturmaktır.
Senaryo 1: HTTPS URL yönlendirmesi
SSL sertifikaları yüklenemediğinden Alibaba Cloud DNS, HTTPS'den HTTPS'ye yönlendirmeyi desteklemez. Nginx ile kendi SSL sertifikanızı yükleyebilir ve özel yönlendirme kuralları tanımlayabilirsiniz.
-
URL yeniden yönlendirmesi (açık yönlendirme)
https://example.comadresinihttps://aliyun.comadresine kalıcı olarak yönlendirir. Tarayıcının adres çubuğu yeni URL'yi gösterecek şekilde güncellenir. Aşağıdaki içeriği/etc/nginx/conf.d/redirect.confdosyasına ekleyin:server { listen 443 ssl http2; server_name example.com; # Configure the SSL certificate and private key for the source domain name ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { return 301 https://aliyun.com$request_uri; } } -
Ters proxy (örtük yönlendirme)
https://example.comadresine gelen isteklerihttps://aliyun.comadresine iletir. İçerik arka uçtan sunulurken tarayıcının adres çubuğu değişmez. Aşağıdaki içeriği/etc/nginx/conf.d/proxy.confdosyasına ekleyin:# Proxy requests for example.com to aliyun.com server { listen 443 ssl http2; server_name example.com; # Configure the SSL certificate and private key for the source domain name ssl_certificate /etc/nginx/certs/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; location / { # Forward the request to the target server proxy_pass http://aliyun.com; # Key configuration: Set the Host request header to the target service's domain name to ensure the backend can process the request correctly. proxy_set_header Host "aliyun.com"; # Pass the client's real IP address for backend logging and analysis 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; } }
Senaryo 2: Alan adını belirli bir bağlantı noktasına eşleyin
Trafiki 80. bağlantı noktasından 3000 gibi standart olmayan bir bağlantı noktasındaki arka uç uygulamasına yönlendirir; böylece kullanıcıların URL'de bağlantı noktasını belirtmesine gerek kalmaz. Aşağıdaki içeriği /etc/nginx/conf.d/port_mapping.conf dosyasına ekleyin:
# Access the service on local port 3000 through example.com
server {
listen 80;
server_name example.com;
location / {
# Forward requests to port 3000 on the local host
proxy_pass http://127.0.0.1:3000;
# Pass the original Host request header so the backend application can identify the domain name being accessed
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4. Adım: DNS çözümlemesini yapılandırın
Nginx yapılandırıldıktan sonra hizmet verdiği alan adları için DNS kayıtları ekleyin.
Bir alan adı edinin. Mevcut bir alan adınız yoksa Alibaba Cloud Domain Names üzerinden kayıt yaptırın. Web sitesi Çin anakarasında barındırılıyorsa öncelikle ICP başvurusunu tamamlayın.
-
Nginx çalıştıran ECS örneğinin genel IP adresini alın.
ECS konsolundaki Instances sayfasında örneğinizi bulun ve IP Address sütununu kontrol edin.
Alibaba Cloud DNS - Public Zone konsoluna gidin ve hedef alan adınızı bulun.
-
Bir DNS kaydı ekleyin veya mevcut olanı değiştirin.
DNS kaydı yapılandırılmamışsa DNS kaydı ekleyin. Nginx'te yapılandırılan her alan adı (örneğin
example.com) için bir A kaydı oluşturun ve bu kaydı ECS örneğinizin genel IP adresine işaret edin.-
DNS kaydı zaten varsa değerini Nginx sunucusunun genel IP adresiyle güncelleyin. DNS değişikliklerinin yayılması 5–10 dakika sürebilir.
Add Record panelinde record type alanını A -- Maps a domain name to an IPv4 address, host record alanını
demo, Resolution Line alanını Default, TTL alanını 10 minutes ve record value alanını Nginx sunucusunun genel IP adresi olarak ayarlayın.
Maliyetler ve riskler
Maliyet: Asıl maliyet ECS örneğidir. Fiyatlandırma; örnek teknik özelliklerine, bölgeye ve faturalama yöntemine göre değişir. Nginx ücretsiz ve açık kaynaklıdır.
Riskler ve bakım: Ters proxy'nin işletilmesi, güvenlik yamalarının uygulanması, hizmet sağlığının izlenmesi ve yapılandırmaların yedeklenmesi sizin sorumluluğunuzdadır. Hatalı kurulum veya ihmal edilen bakım, kesintilere veya güvenlik açıklarına neden olabilir.
Üretim ortamı önerisi: Nginx güvenlik yapılandırmasını sıkılaştırın ve izleme ile günlük analizi ayarlayın.
SSS
Alibaba Cloud DNS bağlantı noktası çözümlemesini destekler mi?