← Back to list

使用 Nginx 反向代理解決 Kintone 跨域問題

好久不見

Ru · 2025-10-30 09:35 · 25 claps · 4.5 min read
#frontend #nginx #kintone #cors
Open on Medium ↗
Wiki topics: 🌐 · Web Development

使用 Nginx 反向代理解決 Kintone 跨域問題

Photo by DJ Johnson on Unsplash

Photo by DJ Johnson on Unsplash

好久不見

好久沒有發文了,去年因為原本工作薪資不理想,去年透過轉職班順利轉職成為前端工程師,未來這裡的內容可能會以分享技術文章為主。

現在我是前端工程師,但因為公司人力精簡,所以我也會接觸一些部屬的東西,剛好我也不排斥,所以碰到了Nginx反向代理器。雖然理解過程有點痛苦,不過得到了新知識也有點成就感,就當作成長痛吧。有些東西對有些人眼裡應該是 Common Sense,但我很常看過了忘光光,要做過痛過才會印象深刻,寫文章也是希望自己再複習一遍,不會很快就忘記。

CORS是什麼?

CORS(Cross-Origin Resource Sharing,跨域資源共享)是瀏覽器(這是伏筆)的安全機制,限制網頁向不同網域的伺服器發送請求。這樣可以保護使用者的重要資料,防止惡意網站利用使用者的身份向其他網站發送未經授權的請求(CSRF 攻擊)。

那 CORS 怎麼運作勒?在網路上閱讀解釋運作原理的文字我很容易放空,用圖解會更好理解:

還有其他有關 CORS 的細節可以去看 🔗ExplainThis 的文章 !

那 Nginx 又是什麼呢?

Nginx 是網路伺服器、反向代理器(更多的解釋可以看看🔗 Nana 的影片教學!),在以下的例子是使用者瀏覽器與伺服器之間的中間人。使用者在瀏覽器輸入想要去的網址(譬如 https://www.moneySlave.com),瀏覽器在 DNS 用網域查詢外網 IP(WAN)位置,透過 Router 的封包傳送和防火牆擋掉不安全的連線,Nginx透過設計好規則將瀏覽器的請求分發到內網的伺服器。

我一樣上圖解可能大家比較好理解:

我遇到了一個問題!

我們公司有使用 Kintone 的服務作為內部行政簽核流程的系統,Kintone 官方表示為了安全考量,Kintone 只接受來自同源的請求,但是目前正在開發的系統會需要 Kintone 的資料,部屬的機台顯然與 Kintone 非同源。

P.S. 同源是指兩份網頁具備相同協定、埠號(有指定)以及主機位置,詳見 🔗mdn的解釋

🔗出處

🔗出處

怎麼辦!?

\ Nginx 出場了 // 這個時候我們可以在 nginx.conf 設定些什麼去解決這個問題!

Nginx 設定範例

server {
    listen 80;
    server_name your-domain.com;

    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 加上這裡!!設置代理 KINTONE API 請求
    location /kintone/ {
        rewrite ^/kintone/(.*)$ /$1 break;

        proxy_pass https://your-subdomain.cybozu.com;

        proxy_set_header Host your-subdomain.cybozu.com;

        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;

        proxy_pass_request_headers on;

        proxy_ssl_server_name on;
        proxy_ssl_protocols TLSv1.2 TLSv1.3;
    }
}

使用方式

當設定 nginx.conf 完成以後,開發系統的前端程式碼可以這樣呼叫:

// 原本需要跨網域的請求
// https://your-subdomain.cybozu.com/k/v1/records.json

// 現在透過同網域的代理
fetch('/kintone/k/v1/records.json', {
    method: 'GET',
    headers: {
        'X-Cybozu-API-Token': 'your-api-token'
    }
})

為什麼 Nginx 可以繞過 CORS 的限制?

瀏覽器 → Nginx (同源) → Kintone (不同源)

因為對瀏覽器來說,它只是向「同源」的 Nginx 發送請求,因此並沒有跨域的問題。而 Nginx 向 Kintone 發送資料請求是「伺服器」VS「伺服器」,他不會有問題!

為什麼?還記得上述我說的嗎?

CORS(Cross-Origin Resource Sharing,跨域資源共享)是瀏覽器的安全機制

所以這個情境並沒有問題喔!


메타데이터
post_id
9c367b4cd331
slug
使用-nginx-反向代理解決-kintone-跨域問題-9c367b4cd331
url
https://medium.com/@l11yo/%E4%BD%BF%E7%94%A8-nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%A7%A3%E6%B1%BA-kintone-%E8%B7%A8%E5%9F%9F%E5%95%8F%E9%A1%8C-9c367b4cd331
canonical_url
https://medium.com/@l11yo/%E4%BD%BF%E7%94%A8-nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%A7%A3%E6%B1%BA-kintone-%E8%B7%A8%E5%9F%9F%E5%95%8F%E9%A1%8C-9c367b4cd331
author_url
https://medium.com/@l11yo
status
ok
fetched_at
2026-06-22 07:15:07