ฉันมีเซิร์ฟเวอร์สองเครื่องที่มีที่อยู่ IP ต่างกัน:
- Tomcat ให้บริการเว็บแอพของฉัน
https://app1.domain.com
(เซ็นโตส6)
- Nginx ทำหน้าที่เป็นวาฟผ่าน
https://nginx.domain.com
(เซ็นโตส7)
Nginx ทำงานบนพอร์ต 443 และฉันใช้เพื่อย้อนกลับพร็อกซี webapp ของฉันด้วยวิธีนี้:
ตำแหน่ง /app1/ {
เขียนใหม่ ^/app1(.*) /$1 ตัวแบ่ง;
proxy_pass https://app1.domain.com/;
}
ด้วยวิธีนี้ ปกติฉันเข้าถึงเว็บแอปผ่าน nginx ผ่าน https://nginx.domain.com/app1/
.
ประการที่สองใน ราก
ในโฟลเดอร์ของ webapp ของฉัน ฉันติดตั้งแอปพลิเคชัน birt-viewer ในไฟล์ ROOT / birt-viewer
โฟลเดอร์ ปกติฉันจะเข้าถึงแอปพลิเคชัน birt-viewer เมื่อฉันใช้ลิงก์ https://app1.domain.com/birt-viewer
.
อย่างไรก็ตาม ฉันไม่สามารถเข้าถึงแอปพลิเคชัน birt เมื่อฉันใช้ลิงก์ https://nginx.domain.com/app1/birt-viewer
. เมื่อฉันคัดลอกตัวอย่างลิงก์
/birt-viewer/Task.jsp?__report=Recare.rpgn&sample=my+parameter&__sessionId=2026
และแปะไว้หลังลิงค์ https://nginx.domain.com/app1
เพื่อรับลิงค์สุดท้าย
https://nginx.domain.com/app1/birt-viewer/Task.jsp?__report=Recare.rpgn&sample=my+parameter&__sessionId=2026
ฉันเข้าถึงแอปพลิเคชัน birt-viewer แต่ฉันสูญเสียการตั้งค่า เช่น คุกกี้และเซสชัน
คุณเข้าใจว่าการเข้าถึงเว็บแอปของฉันผ่าน nginx ฉันต้องทำด้วยตนเอง ข้อเสียคือการสูญเสียคุกกี้ เซสชัน และพารามิเตอร์อื่นๆ
การเข้าถึงควรทำโดยอัตโนมัติโดยไม่มีปัญหา
นี่คือการกำหนดค่า nginx ของฉัน:
ผู้ใช้ nginxxxx;
ผู้ปฏิบัติงาน_กระบวนการ 1;
error_log /var/log/error.log เตือน;
บันทึก pid/nginx.pid;
เหตุการณ์ {
worker_connections 1024;
}
http {
# รวม mime.types;
รวม /opt/nginx/conf/mime.types;
รวม /opt/nginx/conf/naxsi_core.rules;
แอปพลิเคชัน default_type/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$สถานะ $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/access.log หลัก;
ส่งไฟล์บน;
tcp_nopush บน;
keepalive_timeout 65;
tcp_nodelay บน;
เปิด gzip;
gzip_disable "MSIE [1-6].(?!.*SV1)";
client_max_body_size 100m;
client_body_buffer_size 10K;
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
server_name nginx.domain.com;
access_log บน ;
access_log /var/log/access.log หลัก;
error_log บน ;
error_log /var/log/error.log เตือน;
ssl_certificate /etc/ssl/certs/m.crt;
ssl_certificate_key /etc/ssl/private/cs.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers สูง:!aNULL:!MD5;
เปิด ssl_prefer_server_ciphers;
add_header การขนส่งที่เข้มงวด - ความปลอดภัย "อายุสูงสุด = 63072000 รวมโดเมนย่อย" เสมอ;
add_header X-Frame-ตัวเลือก SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-การป้องกัน "1; mode=block";
error_page 403 /403_error.html;
ตำแหน่ง = /403_error.html {
รูท /usr/share/nginx/htmml;
ภายใน;
}
error_page 404 /404_error.html;
ตำแหน่ง = /404_error.html {
รูท /usr/share/nginx/html;
ภายใน;
}
ตำแหน่ง /app1/
{
เขียนใหม่ ^/app1(.*) /$1 ตัวแบ่ง;
proxy_connect_timeout 60000;
proxy_send_timeout 60000;
proxy_read_timeout 60000;
send_timeout 60000;
proxy_pass https://app1.domain.com/;
}
ตำแหน่ง /app1/birt-viewer/ {
เขียนใหม่ ^/app1/folder1(.*) /$1 ตัวแบ่ง;
proxy_pass https:// app1.domain.com/birt-viewer/;
}
}
}
ฉันยังทราบดีว่าเมื่อเว็บแอปของฉันอยู่เบื้องหลัง nginx บาง URL จะไม่เป็นปัจจุบันและยังคงเข้าถึงแบบเก่าได้
ดังนั้นความกังวลของฉันคือการเข้าถึงแอปพลิเคชัน birt-viewer โดยอัตโนมัติ (ไม่ใช่ด้วยตนเอง) ผ่าน nginx ผ่าน https://nginx.domain.com/app1/birt-viewer
ใครมีวิธีแก้ไขสำหรับฉันบ้าง