คำถามติดแท็ก reverse-proxy

reverse proxy เป็นพร็อกซีเซิร์ฟเวอร์ชนิดหนึ่งที่ดึงทรัพยากรจากชุดเซิร์ฟเวอร์ที่กำหนดไว้เฉพาะสำหรับลูกค้า มันถูกใช้ในกรณีที่มีข้อได้เปรียบที่จะไม่เปิดเผยเว็บเซิร์ฟเวอร์พร้อมเนื้อหาโดยตรงไม่ว่าจะเพื่อเหตุผลด้านความปลอดภัยหรือเนื่องจากไม่มีที่อยู่ IP สาธารณะที่มีอยู่

3
เป็นไปได้หรือไม่ที่จะแทนที่เนื้อหาในทุก ๆ หน้าผ่านพร็อกซีคล้ายกับวิธีที่ mod_rewrite ใช้สำหรับ URL?
เป็นไปได้หรือไม่ที่จะแทนที่เนื้อหาในทุก ๆ หน้าผ่านพร็อกซีคล้ายกับวิธีที่ mod_rewrite ใช้สำหรับ URL? เอกสารเกี่ยวกับการทดแทนไม่ชัดเจน ฉันมีบางหน้าฉันย้อนกลับพร็อกซีที่มีเส้นทางที่แน่นอน สิ่งนี้จะทำลายเว็บไซต์ พวกเขาต้องการการแทนที่และเครื่องมือเช่น mod_rewrite ไม่ได้มารับมันเนื่องจากไม่ใช่การร้องขอ URL <VirtualHost *:80> ServerName servername1 ServerAlias servername2 ErrorLog "/var/log/proxy/jpuat_prox_error_log" CustomLog "/var/log/proxy/jpuat_prox_access_log" common RewriteEngine on LogLevel alert rewrite:trace2 RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC] RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P] AddOutputFilterByType SUBSTITUTE text/html Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i" ProxyRequests Off <Proxy *> Order deny,allow Allow from …

5
ฉันจะหยุด nginx จากการลองคำขอ PUT หรือ POST อีกครั้งในการหมดเวลาของเซิร์ฟเวอร์ upstream ได้อย่างไร
เราใช้ nginx เพื่อโหลดคำร้องขอไปยังแอปพลิเคชันของเรา เราพบว่า nginx สลับไปยังเซิร์ฟเวอร์อัปสตรีมอื่นเมื่อขอหมดเวลา (ดี) อย่างไรก็ตามการทำเช่นนี้สำหรับคำขอ PUT และ POST ซึ่งอาจทำให้เกิดผลลัพธ์ที่ไม่พึงประสงค์ (ข้อมูลถูกเก็บไว้สองครั้ง) เป็นไปได้หรือไม่ที่จะกำหนดค่า nginx ให้ลองใช้คำขอ GET อีกครั้งเมื่อหมดเวลา หรือมีวิธีอื่นในการแก้ปัญหาหรือไม่ การกำหนดค่าของเรามีดังนี้: upstream mash { ip_hash; server 127.0.0.1:8081; server 192.168.0.11:8081; } server { ... location / { proxy_pass http://mash/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

1
ไม่สามารถรับ mod_proxy เพื่อส่งต่ออักขระ slash (/) ที่เข้ารหัส (% 2f) ได้อย่างถูกต้อง
ฉันมีโฮสต์เสมือนสร้างขึ้นมาเพื่อการเปลี่ยนเส้นทาง->ntung-gitblit.localhost myserver:1279อย่างไรก็ตามมันไม่ทำงานกับเครื่องหมายทับที่เข้ารหัสไปข้างหน้า ( %2f) URL ที่ฉันพยายามเข้าถึงคือ http://ntung-gitblit.localhost/ABC%2fXYZ หากไม่มีAllowEncodedSlashesก็ล้มเหลว - apache พยายามเข้าถึง/error/HTTP_NOT_FOUND.html.varบนเซิร์ฟเวอร์ การตั้งค่าAllowEncodedSlashesเพื่อOnผลในการตีภายใน URL ต่อไปนี้ http://myserver:1279/ABC/XYZ และการตั้งค่าAllowEncodedSlashesเพื่อNoDecodeผลลัพธ์ใน URL ที่ถูกตีต่อไปนี้ http://myserver:1279/ABC%252fXYZ ในคำอื่น ๆ ก็คือการหลบหนีมากเกินไปหรือต่ำกว่าการหลบหนี คำถาม : ฉันจะทำให้มันตีได้myserver:1279/ABC%2fXYZอย่างไร

3
Nginx ควรอยู่ด้านหน้า HAProxy หรือตรงข้ามหรือไม่?
ฉันมีประสบการณ์น้อยในการออกแบบสถาปัตยกรรมโครงสร้างพื้นฐานของเว็บไซต์ ฉันรู้ว่ามันอาจจะเป็นสถานการณ์ที่เฉพาะเจาะจง เว็บไซต์ควรจะ: 1) ต้องการการสนับสนุน HTTPS สำหรับบางหน้า (เช่นหน้าเข้าสู่ระบบ) ในขณะที่หน้าอื่น ๆ เป็นเพียงหน้า HTTP 2) ต้องการเว็บเซิร์ฟเวอร์หลายเครื่องเพื่อให้โหลดบาลานซ์บางตัวจำเป็นต้องมี 3) ต้องการแคชและการบีบอัด HTTP เพื่อเพิ่มประสิทธิภาพ 4) คำขอบางอย่าง (เช่นการอัปโหลดรูปภาพ) ควรกำหนดเส้นทางไปยังเซิร์ฟเวอร์เบื้องหลังเฉพาะ ดังนั้นจำเป็นต้องมีการปรับสมดุลตาม URL ฉันรู้ว่า NginX และ HAProxy มีทั้ง Reverse Proxy และ / หรือ Load Balancer ที่ดี เนื่องจาก HAProxy ไม่รองรับ SSL ในขณะที่ Nginx load balancing นั้นไม่ดีเท่า HAProxy ฉันจะรับทั้งสองอย่าง ดังนั้นฉันควรใส่ Nginx …

2
วิธีการย้อนกลับพร็อกซีที่มีหรือไม่มีเครื่องหมายทับต่อท้าย
ฉันมีเว็บเซิร์ฟเวอร์ Apache ที่ต้องการย้อนกลับเว็บไซต์พร็อกซี่ ดังนั้นexample.com/test/หรือexample.com/testดึงจากเว็บเซิร์ฟเวอร์อื่น ๆ ฉันได้ติดตั้ง reverse proxy สำหรับอันที่ไม่มีเครื่องหมายทับดังนี้: ProxyPass /test http://othersite.com/test ProxyPassReverse /test http://othersite.com/test แต่มันไม่สามารถใช้งานได้กับเครื่องหมายสแลช ความคิดใด ๆ ฉันลองเปลี่ยนเส้นทางจาก/test/ไปยัง/testโดยไม่มีโชค ขอบคุณ

2
เมื่อกำหนดค่า nginx เป็น reverse proxy จะสามารถเขียนส่วนหัวของโฮสต์ไปยังเซิร์ฟเวอร์ดาวน์สตรีมเช่น ProxyPreserveHost ของ Apache ได้หรือไม่?
ฉันไม่สามารถหาเทียบเท่าของ ProxyPreserveHost ของ Apache ได้http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostตัวเลือกใน nginx นี่เป็นสิ่งจำเป็นเพื่อย้อนกลับพร็อกซีไปยังโฮสต์เสมือน มันทำอะไรแทนชื่อโฮสต์ที่เบราว์เซอร์ระบุด้วยชื่อโฮสต์ของเซิร์ฟเวอร์ดาวน์สตรีม มันมีอยู่หรือไม่

4
การควบคุมเป้าหมายพร็อกซี Nginx โดยใช้คุกกี้หรือไม่
ฉันพยายามแปลงพร็อกซีย้อนกลับโดยใช้การตั้งค่า Apache mod_rewrite ที่น่าสนใจเพื่อใช้ Nginx แทน (เนื่องจากความกังวลภายนอกที่เราย้ายจาก Apache เป็น Nginx และทุกอย่างทำงานได้ดียกเว้นส่วนนี้) การตั้งค่าดั้งเดิมของฉันคือการอ่านคุกกี้ HTTP (กำหนดโดยแอพพลิเคชั่นบางตัว) และขึ้นอยู่กับค่าของมัน มันเป็นอะไรเช่นนี้: RewriteCond %{HTTP_COOKIE} proxy-target-A RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA] RewriteCond %{HTTP_COOKIE} proxy-target-B RewriteRule ^/original-request http://backend-b/another-application [P,QSA] RewriteRule ^/original-request http://primary-backend/original-application [P,QSA] ฉันพยายามทำสิ่งเดียวกันโดยใช้ Nginx และการกำหนดค่าเริ่มต้นของฉันเป็นแบบนี้ (โดยที่ "proxy_override" เป็นชื่อของคุกกี้): location /original-request { if ($cookie_proxy_override = "proxy-target-A") { rewrite . …

2
nginx proxy_pass เขียนตำแหน่งการตอบกลับอีกครั้ง
จุดประสงค์ของอินสแตนซ์ nginx นี้คือการรับ GitLab และ OpenWRT Luci เพื่อเปลี่ยนเส้นทางผ่านพร็อกซีย้อนกลับ มันใช้งานได้แล้วสำหรับเว็บไซต์อื่น ๆ หลายแห่งซึ่งทั้งหมดมี url พื้นฐานซึ่งดูเหมือนจะตอบโต้ปัญหานี้ GitLab ในตัวอย่างนี้อยู่บนโลคัลเซิร์ฟเวอร์ที่พอร์ต 9000 เว็บไซต์ nginx อยู่ที่พอร์ต 8080 OpenWRT มีปัญหาเดียวกัน แต่มี / cgi-bin / luci / การกำหนดค่า nginx ที่เกี่ยวข้องสำหรับตำแหน่งตัวอย่างคือ location /gitlab/ { proxy_pass http://127.0.0.1:9000/; proxy_redirect default; } โปรดทราบว่าผลลัพธ์จะเหมือนกันทั้งที่มีและไม่มีเครื่องหมายทับ มีตัวเลือกการกำหนดค่าพร็อกซีส่วนหัวบางส่วนที่ใช้กับตำแหน่งนี้ # Timeout if the real server is dead proxy_next_upstream …

1
วิธีป้องกัน nginx จากไดเรกทอรีย่อยที่ระบุเฉพาะของพร็อกซีย้อนกลับ
ใน Apache คุณสามารถใช้ ProxyPass ได้ทุกอย่างยกเว้นไดเรกทอรีย่อยอย่างน้อยหนึ่งไดเรกทอรี (ด้วย "!") ProxyPass /subdir ! ProxyPass / http://localhost:9999/ Nginx เทียบเท่าคืออะไร? เห็นได้ชัดว่าการเดาครั้งแรกของฉันไม่ทำงาน: location /subdir { root /var/www/site/subdir; } location / { proxy_pass http://localhost:9999/ ; }

1
ฉันจะทำให้ชื่อโฮสต์ของโพรโทคอล foo ทราบได้อย่างไร
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการรับรู้ชื่อโฮสต์และการใช้พร็อกซี่ ฉันรู้ว่าโปรโตคอลบางตัวรู้จักชื่อโฮสต์ นั่นคือเมื่อฉันเชื่อมต่อกับเซิร์ฟเวอร์ HTTP ที่www.example.comรู้ว่าฉันต้องการwww.example.comบริการ HTTP ไม่ใช่www.example.netแม้ว่าพวกเขาจะอยู่ในที่อยู่ IP เดียวกัน ฉันจะทำสิ่งนี้เพื่อโปรโตคอลfoo ได้อย่างไร (หมายเหตุชั่วคราว: คำถามนี้ปรากฏขึ้นตามการสนทนาเมตา )

2
ส่งต่อการเชื่อมต่อ ssh ไปยังคอนเทนเนอร์นักเทียบท่าตามชื่อโฮสต์
ฉันเข้าสู่สถานการณ์ที่เฉพาะเจาะจงมากและแม้ว่าจะมีวิธีอื่นในการทำเช่นนี้ฉันก็รู้สึกหมกมุ่นอยู่กับสิ่งนี้และต้องการหาวิธีที่จะทำสิ่งนี้: พื้นหลัง สมมติว่าฉันมีเซิร์ฟเวอร์ที่ใช้งานบริการหลายอย่างที่ซ่อนตัวอยู่ในคอนเทนเนอร์นักเทียบท่าแยก เนื่องจากบริการเหล่านั้นส่วนใหญ่เป็น http ฉันจึงใช้พร็อกซี nginx เพื่อแสดงโดเมนย่อยเฉพาะสำหรับแต่ละบริการ ตัวอย่างเช่นเซิร์ฟเวอร์โหนดกำลังทำงานบนคอนเทนเนอร์นักเทียบท่าที่มีพอร์ตที่80ผูกไว้127.0.0.1:8000กับโฮสต์ ฉันจะสร้าง vhost ใน Nginx ที่ผู้รับมอบฉันทะคำขอทั้งหมดเพื่อmyapp.mydomain.com วิธีการที่ภาชนะนักเทียบท่าที่ไม่สามารถเข้าถึงได้จากภายนอกยกเว้นผ่านhttp://127.0.0.1:8000myapp.mydomain.com ตอนนี้ฉันต้องการเริ่มต้นตู้คอนเทนเนอร์gogs dockerในลักษณะที่gogs.mydomain.comชี้ไปที่ตู้ gogs ดังนั้นฉันจึงเริ่มต้นภาชนะ gogs นี้ด้วยพอร์ตที่8000ผูกไว้127.0.0.1:8001กับโฮสต์ และไซต์ nginx proxying ร้องขอไปgogs.mydomain.comยังhttp://127.0.0.1:8001และทำงานได้ดี ... อย่างไรก็ตาม, gogs เป็น git container, ฉันยังต้องการเข้าถึง repos อย่างเช่นผ่าน, git@gogs.mydomain.com:org/repoแต่มันไม่ทำงานกับการตั้งค่าปัจจุบัน วิธีหนึ่งที่จะทำให้การทำงานที่จะมีการผูกพอร์ต22ของภาชนะไปยังท่าเรือ0.0.0.0:8022ในพื้นที่และจากนั้น URL SSH git@gogs.mydomain.com:8022/repoคอมไพล์สามารถเป็นสิ่งที่ชอบ (ดูเหมือนจะไม่ทำงานเมื่อฉันกดไปที่ต้นกำเนิดที่มี uri เช่นนั้น git ต้องการรหัสผ่านสำหรับผู้ใช้gitบนgogs.mydomain.com- แทนgogs.mydomain.com:8022- แต่นั่นอาจเป็นสิ่งที่ฉันทำผิดและอยู่นอกขอบเขตสำหรับคำถามนี้อย่างไรก็ตาม ฉันจะขอบคุณการวินิจฉัยใด ๆ เช่นกัน) ปัญหา …

6
SSH Tunnel สำหรับ Remote Desktop ผ่านทาง Intermediary Server Part II
ก่อนหน้านี้ฉันถามวิธีกำหนดค่า SSH 2 อุโมงค์โดยใช้เซิร์ฟเวอร์ตัวกลางเพื่อเรียกใช้เดสก์ท็อประยะไกลผ่านทางพวกเขาและฉันจัดการเพื่อให้ทำงานได้ ตอนนี้ฉันกำลังพยายามทำสิ่งเดียวกันโดยใช้เครื่องเดียวกัน แต่กลับกัน นี่คือการตั้งค่า: พีซี Windows 7 ในเครือข่ายส่วนตัวนั่งหลังไฟร์วอลล์ การเข้าถึงเซิร์ฟเวอร์ Linux สาธารณะซึ่งมีการเข้าถึงพีซี แล็ปท็อป Windows 7 ที่บ้านซึ่งฉันต้องการใช้ Remote Desktop จากพีซี R60666 localhost:3389ผมใช้สีโป๊วแล็ปท็อปเพื่อสร้างอุโมงค์กลับจากมันไปยังเซิร์ฟเวอร์ลินุกซ์: L60666 localhost:60666ผมใช้สีโป๊วบนเครื่องพีซีที่จะสร้างอุโมงค์ปกติจากมันไปยังเซิร์ฟเวอร์ลินุกซ์: ฉัน SSH ไปตัด Linux และผมทำงาน Telnet localhost 60,666 และดูเหมือนว่าจะผลิตออกคาดว่าตามที่อธิบายไว้ในเคล็ดลับการแก้จุดบกพร่องที่ฉันได้รับที่นี่ ฉันพยายามที่จะเชื่อมต่อใช้ Remote Desktop localhost:60666จากเครื่องคอมพิวเตอร์แล็ปท็อป: มันถามชื่อผู้ใช้และรหัสผ่านของฉันฉันคลิกตกลงและล็อคเซสชันปัจจุบันของฉันบนแล็ปท็อป (ดังนั้นฉันเห็นหน้าจอต้อนรับบนแล็ปท็อปแทนเดสก์ทอปของฉัน) จะแสดงข้อความ "ยินดีต้อนรับ" ในหน้าจอเดสก์ท็อประยะไกล มันแค่เป็นสีดำ ไม่ได้ตัดการเชื่อมต่อไม่มีข้อผิดพลาดและฉันไม่สามารถดำเนินการใด ๆ ในหน้าจอเดสก์ท็อประยะไกล ฉันลองตั้งค่าแบบเดียวกันกับแล็ปท็อป Windows XP …

1
พร็อกซีย้อนกลับแบบง่าย ๆ พร้อม Traefik
ปัจจุบันฉันใช้ Apache เป็นพร็อกซีสำหรับคอนเทนเนอร์ LXD ของฉันโดยใช้การตั้งค่าประเภทนี้: <VirtualHost *:80> ServerName example.com ProxyRequests off ProxyPass / http://10.0.0.142/ retry=0 ProxyPassReverse / http://10.0.0.142/ ProxyPreserveHost On </VirtualHost> ผมอยากจะเปลี่ยนไปtraefik ฉันได้ลองกำหนดค่านี้: defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [backends] [backends.backend1] [backends.backend1.servers.server1] url = "http://10.0.0.142" [frontends] [frontends.frontend1] backend = "backend1" passHostHeader = true [frontends.frontend1.routes.example] rule = "Host:example.com" สองสิ่งนี้เทียบเท่ากันหรือไม่ …

3
ไม่สามารถโหลดทรัพยากร: net :: ERR_CONNECTION_RESET
ตั้งแต่ฉันเริ่มใช้แอปพลิเคชั่นที่อยู่เบื้องหลัง reverse proxy (mod_jk ของ Apache2) ฉันสังเกตว่าบางหน้าจะไม่โหลด (มันจะไม่มีการตั้งค่า reverse proxy) มันเป็นข้อผิดพลาดที่ลึกซึ้งซึ่งผมได้มีการตรวจสอบเพื่อหามันออกมาขอบคุณกับ Google Chrome: ไม่สามารถโหลดทรัพยากร: สุทธิ เพียงแค่ไฟล์ JavaScript จะถูกโหลดบางส่วน (~ 12KB จาก ~ 50KB) ฉันคิดว่ามีบางอย่างผิดปกติกับ Apache2, mod_jk, AJP หรือ Jetty แต่จากนั้นฉันก็มีส่วนร่วมในการสอบสวนว่าฉันจะใช้เบราว์เซอร์ที่แตกต่างกันพร้อมกับเครือข่ายที่แตกต่างกันอย่างไร คำตัดสิน: ข้อผิดพลาดนี้ (ERR_CONNECTION_RESET) เกิดขึ้นเมื่อฉันใช้เครือข่ายที่มีIP คงที่เท่านั้น ฉันลดระดับความปลอดภัยลงในเราเตอร์ตัวเดียว แต่ไร้ประโยชน์ เครือข่ายที่มี IP แบบคงที่พร้อมระดับความปลอดภัยที่สูงขึ้นหรือไม่ จะเอาชนะปัญหานี้ได้อย่างไร? นี่เป็นทางตันเนื่องจากพร็อกซีย้อนกลับส่วนใหญ่ถูกกำหนดให้ใช้ประโยชน์จากที่อยู่ IP แบบคงที่ของจุดขายของเราเพื่อเพิ่มระดับความปลอดภัย

2
ฉันต้องการโซลูชันพร็อกซีย้อนกลับสำหรับ SSH
สวัสดีนี่คือสถานการณ์ที่ฉันมีเซิร์ฟเวอร์ในศูนย์ข้อมูลองค์กรสำหรับโครงการ ฉันมีการเข้าถึง SSH กับเครื่องนี้ที่พอร์ต 22 มีบางเครื่องเสมือนที่ทำงานบนเซิร์ฟเวอร์นี้และที่ด้านหลังของทุกสิ่งระบบปฏิบัติการอื่น ๆ จำนวนมากทำงานอยู่ ตอนนี้ฉันอยู่หลังไฟร์วอลล์ศูนย์ข้อมูลหัวหน้างานของฉันถามฉันว่าฉันสามารถทำบางสิ่งได้หรือไม่ซึ่งฉันสามารถให้คนจำนวนมากบนอินเทอร์เน็ตสามารถเข้าถึงเครื่องเสมือนเหล่านี้ได้โดยตรง ฉันรู้ว่าฉันได้รับอนุญาตให้รับส่งข้อมูลบนพอร์ตอื่นที่ไม่ใช่ 22 แล้วฉันสามารถส่งต่อพอร์ตได้ แต่เนื่องจากฉันไม่ได้รับอนุญาตนี้ดังนั้นสิ่งที่สามารถแก้ไขได้ในกรณีนี้ คนที่ต้องการเชื่อมต่ออาจเป็นไอดอลที่สมบูรณ์ซึ่งอาจมีความสุขเพียงแค่เปิด putty ที่เครื่องของพวกเขาหรืออาจจะเป็น filezilla ฉันไม่ได้มีไฟร์วอลล์ในมือของฉันหรือพอร์ตอื่นที่ไม่ใช่ 22 เปิดและในความเป็นจริงแม้ว่าฉันจะขอให้พวกเขาไม่อนุญาตให้เปิด 2 ครั้ง SSH ไม่ใช่สิ่งที่หัวหน้างานของฉันต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.