Kako vam lahko pomagamo?

Na kratko nam povejte, za kaj gre – odgovorili vam bomo po e-pošti.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Na začetno stran

Özel alan adı ve birinci taraf proxy

Widget dosyaları, sohbet bağlantısı, çevrimdışı form ve Smart Answer web sitenizin alt alan adından nasıl sunulur: proxy anahtarı, gerçek ziyaretçi adresi ve nginx, Apache, Caddy için hazır şablonlar.

Özel alan adıyla sohbet, web sitenizin bir alt alan adı üzerinden çalışır; örneğin chat.your-company.com. Sunucunuz widget isteklerini alır ve ters proxy olarak reactive.chat hizmetine iletir. Bu sayfa sunucuyu yöneten kişi içindir. İçerik editörleri için kısa sürüm Özel alan adı (birinci taraf) bölümündedir.

Alt alan adı üzerinden çalışanlar

Sağladıkları:

Sağlamadıkları:

Gereksinimler

Kurulum

  1. Hesabınızda projeyi, Yerleştirme → Özel alan adı kur bölümünü açın.
  2. 1. Ana makine altında adı, örneğin chat.your-company.com, girip kaydedin.
  3. 2. Proxy anahtarı altında Anahtar oluştur düğmesine tıklayın. Anahtar rcpx_ ile başlar ve yalnızca bir kez gösterilir; yalnızca özeti saklanır. Sadece proxy yapılandırmasında bulunmalıdır; web sayfasına, tarayıcı betiğine veya kod deposuna asla koymayın.
  4. 3. Sunucu yapılandırması altında sunucunuzun şablonunu alın. Anahtarı oluşturduktan hemen sonra anahtarı içerir; daha sonra __RC_PROXY_KEY__ gösterir. Yapılandırmayı sınayın (nginx -t veya apachectl configtest) ve sunucuyu yeniden yükleyin.
  5. 5. Kontrol altında Şimdi kontrol et düğmesine tıklayın (en fazla 10 saniyede bir). Mesaj oluşturulmaz.
  6. Yalnızca beş kontrol adımının tümünde “Tamam” görünürse yerleştirme kodunu 4. Yerleştirme kodu altındakiyle değiştirin:
<script src="https://chat.your-company.com/loader.js"
        data-rc-site-key="SITE_KEY"
        data-rc-ws-url="wss://chat.your-company.com/rc_wss/"
        async></script>

Widget dosyalarının konumunu src değerinden, sohbet bağlantısını data-rc-ws-url değerinden alır; çevrimdışı form, yükleme ve HTTP yedeği adreslerini bundan türetir. Diğer tüm öznitelikler aynı kalır (Script etiketi başvurusu).

Proxy neleri iletmelidir?

Tüm yollar için:

/rc_wss/, /api/offline/ ve /api/suche/ için proxy her istekte iki başlık ayarlar:

“Ayarlar” şu demektir: tarayıcının bu adlarla gönderdiği her değerin üzerine yazılır. Dağıtım ağına giden yolda ikisi de temizlenir.

Yük dengeleyici veya CDN arkasında proxy önce o cihazın adresini görür. Bu durumda gerçek adresin alınmasını ayarlayın: nginx real_ip (set_real_ip_from, real_ip_header), Apache mod_remoteip (RemoteIPHeader, RemoteIPTrustedProxy), Caddy trusted_proxies ve {remote_host} yerine {client_ip}. Kontrol bu durumu saptamaz; yalnızca geçerli bir adres ayarlandığını görür.

nginx şablonu

Hesap sayfası ana makine adını, hedef adresleri ve anahtarı doldurur; şablonu oradan kopyalamanız en iyisidir. Buradaki sürüm başvuru içindir; yer tutucular chat.your-company.com, SITE_KEY ve __RC_PROXY_KEY__ değerleridir. RHEL/CentOS üzerinde CA paketi /etc/pki/tls/certs/ca-bundle.crt konumundadır.

server {
    listen 80;
    listen [::]:80;
    server_name chat.your-company.com;
    location /.well-known/acme-challenge/ { root /var/www/html; }
    location / { return 301 https://$host$request_uri; }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name chat.your-company.com;

    ssl_certificate     /etc/letsencrypt/live/chat.your-company.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/chat.your-company.com/privkey.pem;

    # HTTP fallback (SSE / long polling): token in the query, do not log
    location /rc_wss/h/ {
        access_log off;
        proxy_pass https://ws.reactive.chat/rc_wss/h/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host ws.reactive.chat;
        proxy_ssl_server_name on;
        proxy_ssl_name ws.reactive.chat;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_set_header X-RC-Proxy-Key "__RC_PROXY_KEY__";
        proxy_set_header X-RC-Client-IP $remote_addr;
        proxy_set_header Cookie "";
        proxy_set_header Authorization "";
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
        proxy_cache off;
    }

    # Chat connection (WebSocket) and uploads
    location /rc_wss/ {
        proxy_pass https://ws.reactive.chat/rc_wss/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host ws.reactive.chat;
        proxy_ssl_server_name on;
        proxy_ssl_name ws.reactive.chat;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_set_header X-RC-Proxy-Key "__RC_PROXY_KEY__";
        proxy_set_header X-RC-Client-IP $remote_addr;
        proxy_set_header Cookie "";
        proxy_set_header Authorization "";
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
        proxy_cache off;
        client_max_body_size 32m;
        proxy_request_buffering off;
    }

    # Offline form
    location /api/offline/ {
        proxy_pass https://ws.reactive.chat/api/offline/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host ws.reactive.chat;
        proxy_ssl_server_name on;
        proxy_ssl_name ws.reactive.chat;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_set_header X-RC-Proxy-Key "__RC_PROXY_KEY__";
        proxy_set_header X-RC-Client-IP $remote_addr;
        proxy_set_header Cookie "";
        proxy_set_header Authorization "";
        proxy_hide_header Set-Cookie;
        client_max_body_size 32k;
        proxy_read_timeout 30s;
    }

    # Smart Answer (website search), answer as a stream
    location /api/suche/ {
        proxy_pass https://ws.reactive.chat/api/suche/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host ws.reactive.chat;
        proxy_ssl_server_name on;
        proxy_ssl_name ws.reactive.chat;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_set_header X-RC-Proxy-Key "__RC_PROXY_KEY__";
        proxy_set_header X-RC-Client-IP $remote_addr;
        proxy_set_header Cookie "";
        proxy_set_header Authorization "";
        proxy_hide_header Set-Cookie;
        client_max_body_size 8k;
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 120s;
    }

    # Widget files
    location / {
        proxy_pass https://cdn.reactive.chat/;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host cdn.reactive.chat;
        proxy_ssl_server_name on;
        proxy_ssl_name cdn.reactive.chat;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;
        proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
        proxy_set_header X-RC-Proxy-Key "";
        proxy_set_header X-RC-Client-IP "";
        proxy_set_header Cookie "";
        proxy_set_header Authorization "";
        proxy_hide_header Set-Cookie;
    }
}

Apache şablonu (2.4.47 veya üzeri)

Yalnızca 443 numaralı port için VirtualHost; 80 numaralı porttan yönlendirmeyi ve sertifikayı diğer ana makinelerinizdeki gibi ayarlayın. SSLProxyVerifyDepth 5 gereklidir; aksi durumda Apache hedefin zincirini yalnızca bir düzey derinliğinde kontrol eder ve “Certificate Chain too long” bildirir.

<VirtualHost *:443>
    ServerName chat.your-company.com

    SetEnvIf Request_URI "^/rc_wss/h/" rc_no_log
    CustomLog ${APACHE_LOG_DIR}/chat.your-company.com_access.log combined env=!rc_no_log

    SSLEngine on
    SSLCertificateFile    /etc/letsencrypt/live/chat.your-company.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/chat.your-company.com/privkey.pem

    SSLProxyEngine on
    SSLProxyVerify require
    SSLProxyVerifyDepth 5
    SSLProxyCheckPeerName on
    SSLProxyCACertificateFile /etc/ssl/certs/ca-certificates.crt
    ProxyRequests Off
    ProxyPreserveHost Off
    ProxyAddHeaders Off

    RequestHeader unset X-RC-Proxy-Key early
    RequestHeader unset X-RC-Client-IP early
    RequestHeader unset Cookie early
    RequestHeader unset Authorization early

    ProxyPass "/rc_wss/"      "https://ws.reactive.chat/rc_wss/" upgrade=websocket timeout=3600 flushpackets=on
    ProxyPass "/api/offline/" "https://ws.reactive.chat/api/offline/" timeout=30
    ProxyPass "/api/suche/"   "https://ws.reactive.chat/api/suche/" timeout=120 flushpackets=on
    ProxyPass "/"             "https://cdn.reactive.chat/"

    <Location "/rc_wss/">
        RequestHeader set X-RC-Proxy-Key "__RC_PROXY_KEY__"
        RequestHeader set X-RC-Client-IP "expr=%{REMOTE_ADDR}"
    </Location>
    <Location "/api/offline/">
        RequestHeader set X-RC-Proxy-Key "__RC_PROXY_KEY__"
        RequestHeader set X-RC-Client-IP "expr=%{REMOTE_ADDR}"
        Header unset Set-Cookie
    </Location>
    <Location "/api/suche/">
        RequestHeader set X-RC-Proxy-Key "__RC_PROXY_KEY__"
        RequestHeader set X-RC-Client-IP "expr=%{REMOTE_ADDR}"
        Header unset Set-Cookie
    </Location>
</VirtualHost>

2.4.47 öncesi Apache, upgrade=websocket seçeneğini tanımaz. Bu durumda ilk ProxyPass satırını şununla değiştirin:

RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule ^/rc_wss/(.*) "wss://ws.reactive.chat/rc_wss/$1" [P,L]
ProxyPass "/rc_wss/" "https://ws.reactive.chat/rc_wss/" timeout=3600 flushpackets=on

Caddy 2 şablonu

Bir değerle kullanılan header_up, tarayıcının bu adla gönderdiği değeri değiştirir. Erişim günlüklerini açarsanız /rc_wss/h/* yolunu hariç tutun (log_skip; Caddy 2.8 öncesinde skip_log).

chat.your-company.com {
    handle /rc_wss/* {
        reverse_proxy https://ws.reactive.chat {
            header_up Host ws.reactive.chat
            header_up X-RC-Proxy-Key "__RC_PROXY_KEY__"
            header_up X-RC-Client-IP {remote_host}
            header_up -Cookie
            header_up -Authorization
            transport http {
                tls_server_name ws.reactive.chat
            }
            flush_interval -1
        }
    }
    handle /api/offline/* {
        reverse_proxy https://ws.reactive.chat {
            header_up Host ws.reactive.chat
            header_up X-RC-Proxy-Key "__RC_PROXY_KEY__"
            header_up X-RC-Client-IP {remote_host}
            header_up -Cookie
            header_up -Authorization
            header_down -Set-Cookie
            transport http {
                tls_server_name ws.reactive.chat
            }
        }
    }
    handle /api/suche/* {
        reverse_proxy https://ws.reactive.chat {
            header_up Host ws.reactive.chat
            header_up X-RC-Proxy-Key "__RC_PROXY_KEY__"
            header_up X-RC-Client-IP {remote_host}
            header_up -Cookie
            header_up -Authorization
            header_down -Set-Cookie
            transport http {
                tls_server_name ws.reactive.chat
            }
            flush_interval -1
        }
    }
    handle {
        reverse_proxy https://cdn.reactive.chat {
            header_up Host cdn.reactive.chat
            header_up -X-RC-Proxy-Key
            header_up -X-RC-Client-IP
            header_up -Cookie
            header_up -Authorization
            header_down -Set-Cookie
            transport http {
                tls_server_name cdn.reactive.chat
            }
        }
    }
}

Beş kontrol adımı

Her adım “Tamam”, “Hata”, “Not” veya “kontrol edilmedi” gösterir. Kontrol yalnızca beş kez “Tamam” ile başarılıdır. Kontroller 443 numaralı portta yalnızca HTTPS kullanır; yönlendirme yoktur, adım başına 5 saniye.

  1. Ad çözümleme – A/AAAA mevcut, tüm adresler genel erişime açık. Sonraki tüm adımlar tam olarak bu adrese bağlanır.
  2. Alan adınız üzerinden loader.js – dosya yüklenip bizimkiyle karşılaştırılır. Bağlantı, yanıt veya geçerli sertifika yoksa kalan adımlar atlanır. Yönlendirme hatadır; farklı dosya önbelleği veya / için yanlış hedefi işaret eder.
  3. Anahtar ve ziyaretçi adresi – /rc_wss/eigene-domain-probe çağrısı. Olası hatalar: X-RC-Proxy-Key eksik; anahtar bilinmiyor (oluşturulduktan hemen sonra en fazla 30 saniye gecikme); X-RC-Client-IP eksik veya geçersiz; anahtar başka projeye ait. Anahtar geçerli ancak farklı ana makine için kayıtlıysa not gösterilir.
  4. WebSocket – wss://chat.your-company.com/rc_wss/, HTTP 101 ve rc.v1 alt protokolüyle yanıt vermelidir.
  5. Çevrimdışı form – GET /api/offline/SITE_KEY, 405 ile yanıt vermelidir (uç nokta yalnızca POST kabul eder; böylece mesaj oluşturulmaz).

Kontrol adresini 3. adımda gösterildiği gibi kendiniz de çağırabilirsiniz:

curl -s https://chat.your-company.com/rc_wss/eigene-domain-probe

Doğru kurulumda:

{"rc":"eigene-domain-probe","v":1,"schluessel":"gueltig","client_ip":"gesetzt","site":"SITE_KEY","host":"chat.your-company.com"}

Proxy anahtarı

Sorun giderme

Sonraki: Taşıma ve protokol · Güvenlik ve CSP

Zadnja posodobitev: