Score:0

การกำหนดค่า NGINX ด้วยการตั้งค่า proxy_pass บนไดเร็กทอรีย่อยที่ชี้ไปยังเซิร์ฟเวอร์นักเทียบท่า และตรวจสอบการแก้ไข URL ที่เกี่ยวข้อง (.js, .css)

ธง ky

ฉันมี nginx 1.14.0 ทำงานบนเซิร์ฟเวอร์ Ubuntu 18.04 บนเซิร์ฟเวอร์นั้น ฉันพยายามโฮสต์แอปพลิเคชันต่างๆ ด้วยตนเอง เป้าหมายของฉันคือให้แต่ละตำแหน่งอยู่ในไดเร็กทอรีย่อยของ URL ของฉัน server.calebjay.com

ตัวอย่างเช่น ตอนนี้ผมต้องการตั้งค่า พิกแกลเลอรี2 ได้ที่ server.calebjay.com/photos. ในการทำเช่นนั้น ฉันมีอินสแตนซ์นักเทียบท่าที่ให้บริการบนพอร์ต 800 และฉันมี จิงซ์ พร็อกซี่กับมัน สิ่งนี้ใช้ได้ผลเพียงบางส่วน index.html โหลด

อย่างไรก็ตาม URL ที่เกี่ยวข้อง เช่น สคริปต์ src, ไม่ได้แก้ไข, ผมเชื่อว่าเพราะพวกเขากำลังก่อตัวขึ้นเช่น main.js แทน /photos/main.js.

เพื่อทดสอบ ฉันทำได้ รับ https://server.calebjay.com/photos, และแก้ปัญหา index.html. ฉันได้รับ 404s สำหรับไฟล์ .js และ .css จำนวนมาก ยืนยัน ถ้าฉันคว้า URL สัมพัทธ์เหล่านั้น และทำ https://server.calebjay.com/photos/main-asdfasdf.jsฉันยังคงได้รับ 404 {server-ip-address}/photos/main-asdf.js และ https://server.calebjay.com/photos/main-asdf.js ทั้งคู่ส่งคืนไฟล์ JS ที่กำหนดอย่างถูกต้อง

มีคำตอบมากมายเกี่ยวกับเรื่องนี้ แต่ไม่มีใครได้ผลสำหรับฉัน

การกำหนดค่า nginx พื้นฐานของฉัน:

/etc/nginx/nginx.conf

ผู้ใช้ www-data;
worker_processes อัตโนมัติ
pid /run/nginx.pid;
รวม /etc/nginx/modules-enabled/*.conf;

เหตุการณ์ {
        worker_connections 768;
}

http {
        ส่งไฟล์บน;
        tcp_nopush บน;
        tcp_nodelay บน;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        รวม /etc/nginx/mime.types;
        แอปพลิเคชัน default_type/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # วาง SSLv3 อ้างอิง: พุดเดิ้ล
        เปิด ssl_prefer_server_ciphers;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        เปิด gzip;

        รวม /etc/nginx/conf.d/*.conf;
        รวม /etc/nginx/sites-enabled/*;
}

สำหรับโดเมนย่อยและเซิร์ฟเวอร์นักเทียบท่าเดี่ยวที่ฉันใช้พร็อกซีในตอนนี้:

/etc/nginx/sites-available/server.calebjay.com.conf

   เซิร์ฟเวอร์ {
        ฟัง 80 default_server;
        ฟัง [::]:80 default_server;

        server_name server.calebjay.com www.server.calebjay.com;
        ส่งคืน 301 https://$server_name$request_uri;
  }

  เซิร์ฟเวอร์ {
    server_name server.calebjay.com; 

    เปิด gzip;


#ตำแหน่ง ~ \.css {
# add_header ข้อความประเภทเนื้อหา / css;
#}
#location ~ \.js {
# add_header แอปพลิเคชันประเภทเนื้อหา / x-javascript;
#}

#ที่ตั้ง / {
 # ถ้า ($http_referer ~ "^https?://[^/]+/photos/") {
 # เขียนใหม่ ^/(.*) https://$http_host/photos/$1 redirect;
 # }
# ถ้า ($http_referer = "https://server.calebjay.com/photos/") {
# เขียนใหม่ ^/(.*) https://server.calebjay.com/photos/$1 redirect;
# }
#}

   สถานที่ /รูปภาพ/ {
    # เขียนใหม่ ^/photos(/.*)$ $1 พัก;
      proxy_pass http://localhost:800/;
      proxy_http_version 1.1;
      proxy_set_header อัพเกรด $http_upgrade;
      proxy_set_header การเชื่อมต่อ 'อัปเกรด';
     # sub_filter "<head>" "<head><base href=\"${scheme}://${host}/photos\">";
      proxy_set_header โฮสต์ $host;
      proxy_cache_bypass $http_upgrade;
    }


    ฟัง 443 ssl default_server;
    ฟัง [::]:443 ssl default_server;

    ssl_certificate /etc/letsencrypt/live/server.calebjay.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/server.calebjay.com/privkey.pem;
    รวม /etc/letsencrypt/options-ssl-nginx.conf;
  }

แต่ละส่วนที่แสดงความคิดเห็นเป็นการทดลองแยกต่างหากที่ฉันได้ลองจากที่ต่างๆ ในเครือข่ายสแต็ก:

ไม่ใช่ทั้งสองอย่าง เขียนใหม่ ขึ้นอยู่กับ http-ผู้อ้างอิง ใช้งานได้แม้ว่าภาพหนึ่งภาพจะได้รับการแก้ไขก็ตาม

การมีกฎที่ชัดเจนสำหรับรูปภาพ ก็ไม่เช่นกัน การเพิ่มส่วนหัวประเภท mime ทำงาน

คำตอบเกี่ยวกับเนื้อหาคงที่ และ try_files ใช้งานไม่ได้ และฉันก็ไม่ควรเชื่อเช่นกัน เนื่องจากฉันใช้พร็อกซีไปยังเซิร์ฟเวอร์

แทนที่ลิงก์โดยใช้ sub_filter ไม่ได้ผล

การตั้งค่า ที่ตั้ง เช่น /ภาพถ่าย แทน /ภาพถ่าย/ ไม่ได้ผล

ฉันไม่สามารถเข้าถึง docker internals ได้ ดังนั้นจึงไม่สามารถแก้ไข html ได้โดยตรง

ฉันจะรับของฉันได้อย่างไร hrefs เพื่อแก้ไขกับโดเมนที่ถูกต้องด้วยไดเร็กทอรีย่อยของ /ภาพถ่าย/?

(ฉันรีสตาร์ท nginx หลังจากเปลี่ยนการกำหนดค่าทุกครั้ง)

รายละเอียดเพิ่มเติม:

nginx -V

รุ่น nginx: nginx/1.14.0 (Ubuntu)
สร้างด้วย OpenSSL 1.1.1 11 ก.ย. 2561
เปิดใช้งานการสนับสนุน TLS SNI
กำหนดค่าอาร์กิวเมนต์: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-H4cN7P/nginx-1.14.0=-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-B symbolic-functions -Wl,-z,relro -Wl ,-z, ตอนนี้ -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path= /usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http- proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --กับ-debug --กับ-pcre-jit --กับ-http_ssl_module --กับ-http_stub_status_module --กับ-http_realip_module --กับ-http_auth_request_module --กับ-http_v2_module --กับ-http_dav_module --กับ-http_slice_module --กับ -threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_fi lter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

แก้ไข: อ่าดูเหมือนว่า http_referer เขียนใหม่ โซลูชันทำงานในโหลด js, css ฯลฯ แต่แอปพลิเคชัน JS เปลี่ยน URL ไคลเอ็นต์ในฝั่งไคลเอ็นต์โดยไม่ต้องออกคำขอเป็น server.calebjay.com/จึงทำให้เบราว์เซอร์ของฉันแสดง server.calebjay.com/loginจึงทำให้คำขอในอนาคตพลาดไป http_referer. อาจไม่สามารถแก้ไขได้ เนื่องจากฉันไม่ทราบวิธีการบังคับจาวาสคริปต์ให้เขียน URL ใหม่ตามไดเร็กทอรีย่อย ฉันอาจถูกบังคับให้มีแอปพลิเคชันทั้งหมดของฉันในโดเมนย่อยแยกกัน เว้นแต่ว่าแอปพลิเคชันที่กำหนดจะใช้การกำหนดค่าไดเรกทอรีย่อย

Score:0
ธง us

คุณต้องกำหนดค่า URL พื้นฐานของแอปพลิเคชันของคุณให้ถูกต้อง เพื่อให้สร้าง URL ที่เหมาะสมซึ่งตรงกับการตั้งค่าของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา