คำถามติดแท็ก nginx

Nginx ("eNgine x") เป็นเซิร์ฟเวอร์ HTTP น้ำหนักเบาประสิทธิภาพสูงพร็อกซีย้อนกลับพร็อกซีสตรีมพร็อกซี TCP และพร็อกซีเมลซึ่งวางจำหน่ายภายใต้สิทธิ์ใช้งาน BSD


2
ป้องกันไม่ให้ nginx เปลี่ยนเส้นทางปริมาณการใช้ข้อมูลจาก https ไปยัง http เมื่อใช้เป็น reverse proxy
นี่คือ nginx vhost ตัวย่อของฉัน conf: upstream gunicorn { server 127.0.0.1:8080 fail_timeout=0; } server { listen 80; listen 443 ssl; server_name domain.com ~^.+\.domain\.com$; location / { try_files $uri @proxy; } location @proxy { proxy_pass_header Server; proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme …
16 nginx  ssl  https 

3
วิธีการเรียกใช้ nginx SSL บนพอร์ตที่ไม่ได้มาตรฐาน
ฉันรู้ว่านี่เป็นคำถามที่ซ้ำกันอย่างน้อยสองสามข้อ แต่ฉันได้อ่านมาแล้วหลายครั้งและฉันก็ยังทำอะไรผิดไป ต่อไปนี้เป็นเนื้อหาของแฟ้ม myexample.com Nginx /etc/nginx/sites-availableการตั้งค่าของฉันอยู่ใน server { listen 443 ssl; listen [::]:443 ssl; server_name myexample.com www.myexample.com; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem; #Configures the publicly served root directory #Configures the index file to be served root /var/www/myexample.com; index index.html index.htm; } ใช้งานได้เมื่อฉันไปที่https://myexample.comเนื้อหาจะแสดงและการเชื่อมต่อนั้นปลอดภัย ดังนั้นการกำหนดค่านี้ดูเหมือนจะดี ตอนนี้ถ้าฉันเปลี่ยนพอร์ต ssl เป็น 9443 …
16 nginx  ssl 

3
วิธีการลบที่ตั้งบล็อกจาก $ uri ในการกำหนดค่า nginx?
ฉันมีการเขียนซ้ำในไฟล์ ngix conf ของฉันที่ทำงานได้อย่างถูกต้องยกเว้นดูเหมือนว่าจะรวมบล็อกที่ตั้งเป็นส่วนหนึ่งของตัวแปร $ uri ฉันต้องการเส้นทางหลังจากบล็อกตำแหน่งเท่านั้น รหัสการกำหนดค่าปัจจุบันของฉันคือ: location /cargo { try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args; } การใช้ URL ตัวอย่างของhttp://localhost/cargo/testpageการเปลี่ยนเส้นทางทำงานอย่างไรก็ตามค่าของพารามิเตอร์ "_REWRITE_COMMAND" ที่ได้รับจากไฟล์ php ของฉันคือ "/ cargo / testpage" ฉันต้องถอดบล็อกที่ตั้งออกและมี "testpage" เป็น $ uri ฉันค่อนข้างมั่นใจว่ามีไวยากรณ์ของ regex เพื่อแยก $ uri และกำหนดให้กับตัวแปรใหม่โดยใช้ $ 1 $ 2 ฯลฯ แต่ฉันไม่พบตัวอย่างใด ๆ ที่จะทำเพียงแค่การกำหนดตัวแปรโดยใช้ regex ที่ไม่ได้เป็นส่วนหนึ่งของการเขียนซ้ำ คำให้การ. ฉันค้นหามาหลายชั่วโมงแล้วและดูเหมือนว่าฉันจะผ่านขั้นตอนสุดท้ายไม่ได้ …
16 nginx 

4
วิธีการ proxy / grafana กับ nginx
ฉันได้ติดตั้งและ grafana เริ่มต้นเริ่มต้นและทำงานได้ตามที่คาดไว้http: // localhost: 3000 ฉันพยายามที่จะ proxy มันด้วย nginx ที่ฉันติดตั้ง ssl ฉันพยายามที่จะให้มันตอบสนองต่อhttps: // localhost / grafanaแต่มันทำหน้าที่ดังต่อไปนี้: {{alert.title}} ฉันมีสิ่งนี้ในบล็อกเซิร์ฟเวอร์ nginx ของฉัน: location /grafana { proxy_pass http://localhost:3000; proxy_set_header Host $host; }
15 nginx 

3
ทำไม Internet Explorer 11 ไม่สามารถเชื่อมต่อกับไซต์ HTTPS เมื่อเปิดใช้งาน TLS 1.2
ปกติฉันจะไม่ใช้ Internet Explorer เลย ฉันใช้งานได้เฉพาะในเวลาออกแบบสำหรับการทดสอบส่วนต่อประสาน (เครื่องพัฒนาและด้วย http ที่ไม่ได้เข้ารหัส) ฉันทำการทดสอบเซิร์ฟเวอร์ SSL Labs ทุกสัปดาห์ซึ่งระบุว่า IE11 สามารถเข้าถึงเว็บไซต์ของฉันได้ วันนี้ฉันค้นพบปัญหากับหนึ่งในบริการของบุคคลที่สามของฉัน ฟังก์ชั่นพิเศษบางอย่างไม่ทำงานกับ Chrome หรือ Firefox ดังนั้นฉันจึงเปิดตัว IE11 บนเครื่อง Windows 7 ของฉัน และ IE11 แสดงให้ฉันเห็นหน้าข้อผิดพลาดในตัวแม่มดโดยทั่วไปบอกว่า "หน้าไม่สามารถแสดงได้" และ dummy bla bla ทั่วไปเช่นตรวจสอบ DNS และอื่น ๆ ไม่มีวี่แววของปัญหาการเข้ารหัสที่เกี่ยวข้องกับหน้าข้อผิดพลาดทั้งหมด (เช่นเบราว์เซอร์ปกติจะทำ) ย้อนกลับไปสองสามเดือนมีschannelปัญหานี้ซึ่งป้องกันไม่ให้ IES ที่เปิดใช้งาน TLS1.2 เข้าถึงไซต์ HTTPS จากจุดนั้นในเวลา "รายการตรวจสอบ WTF สำหรับ IE …

3
nginx: ไม่มีสตรีมสดขณะเชื่อมต่อกับอัปสตรีม
ข้อผิดพลาดเกตเวย์ไม่ถูกต้อง 502 แสดงเมื่อสลับระหว่างหน้าเว็บไซต์และบางครั้งในหน้าแรก แต่ไม่ใช่สำหรับคำขอแรกในหน้าแรกเป็นเพียงเมื่อมีการเปลี่ยนเส้นทางหน้าอื่นไป และมันเกิดขึ้นสำหรับไฟล์จาวาสคริปต์บางไฟล์ load balancing ถูกกำหนดค่าไว้ใน upstreams สอง php1 php2 ทั้งสองเป็น apache server เมื่อฉันตรวจสอบบันทึกข้อผิดพลาดที่ฉันชอบ: no live upstreams while connecting to upstream [error] 27212#0: *314 no live upstreams while connecting to upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/" และนี่คือการกำหนดค่าเซิร์ฟเวอร์สมดุลภาระ upstream …
15 nginx  gateway  502 

1
ตำแหน่ง nginx คืออะไร ~ * และ ~
ฉันพยายามทำความเข้าใจกับ nginx ให้ดีขึ้นเล็กน้อยและพยายามสร้าง regex โดยที่ url ที่ไม่ตรงกันทุกตัว/api/postdataV1จะถูกส่งไปยังกลุ่มของเซิร์ฟเวอร์ที่แตกต่างกัน ฉันเห็นตัวอย่างสองสิ่งนี้ต่อไปโดยไม่มีคำอธิบาย location ~ {some regex} location ~* (some regex} คำถามแรกของฉันคือสิ่งเหล่านี้~และ~*(ฉันคิด~ว่าฉันหมายถึงเพียงแค่ระบุ regex?) แต่สิ่งที่เกี่ยวกับ~*ตอนนั้น? สิ่งที่ฉันคิดว่าสิ่งที่ฉันต้องการคือ สิ่งนี้จะถูกต้องหรือไม่ location ~ ^/api/postdataV1$ { #matches to this route to where I want } location / { #This will be everything except /api/postdataV1 I think } สิ่งนี้จะถูกต้องหรือไม่ แต่สิ่งที่เกี่ยวกับ~*... ฉันไม่ได้รับอย่างนั้น ขอบคุณคณบดี
15 nginx 

1
ความคืบหน้าการอัปโหลด nginx รวมกับคำขอปกติ
ฉันมีโฮสต์เสมือนที่ดีสำหรับ nginx ที่ทำงานได้ดีโดยไม่ต้องใช้โมดูลอัปโหลด nginx เมื่อฉันเพิ่มความคืบหน้าการอัพโหลดลงในคำขออัปโหลดของฉันนี้ ฉันจะแก้ปัญหานี้ได้อย่างไร ฉันต้องอัปโหลดไฟล์โดยใช้/?r=uploadหรือ/upload?foo=barและติดตามข้อมูลความคืบหน้าการอัปโหลดโดยใช้/progressหรืออย่างอื่น # static9-localhost.sweb server { # upload limit # upload_limit_rate 10240; # request size limitation client_max_body_size 500m; client_body_buffer_size 64k; # document root root /path/to/webapp/static/public/; # index file index index.php; # server name server_name static9-localhost.sweb; # rewrite rules rewrite "^/thumbnail/([A-Za-z0-9]{12})/(.*)/.*$" /index.php?r=thb&unique=$1&prm=$2 last; # / location …
15 nginx 

2
PHP-FPM ไม่เริ่มทำงานโดยอัตโนมัติหลังจากรีบูต
ฉันใช้ PHP-FPM และ Nginx เป็นครั้งคราวด้วยเหตุผลใดก็ตามฉันต้องรีบูตเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์ทำงานอีกครั้งบริการ nginx จะเริ่มทำงานโดยอัตโนมัติอย่างไรก็ตาม PHP-FPM จะไม่ทำงาน สิ่งนี้สามารถเห็นได้เมื่อฉันรันคำสั่งsudo /etc/init.d/php-fpm restartทันทีหลังจากรีบูตและรับผลลัพธ์: $ sudo /etc/init.d/php-fpm restart Stopping php-fpm: [FAILED] Starting php-fpm: [ OK ] เป็นพฤติกรรมที่คาดหวังหรือไม่ วิธีที่ดีที่สุดในการทำให้ PHP-FPM เริ่มต้นโดยอัตโนมัติคืออะไร มีตัวเลือกการกำหนดค่าที่ใด ๆ หรือฉันต้องเพิ่มคำสั่งลงในสคริปต์เริ่มต้นระบบ Linux อย่างใดอย่างหนึ่งหรือไม่ ขอบคุณ

1
รักษาการเปลี่ยนเส้นทางใน nginx จากแหล่งภายนอก
ฉันอยู่ในสถานการณ์ที่จะให้โอกาสทางการตลาดแก่ฝ่ายการตลาดของพวกเขาในการรักษาการเปลี่ยนเส้นทางด้วยตนเอง nginx.confจนถึงขณะนี้พวกเขาผ่านข้อมูลไปยังแผนกไอทีและเราเก็บรักษามันสำหรับพวกเขาใน พวกเหล่านี้บางคนค่อนข้างคุ้นเคยกับการเปลี่ยนเส้นทางใน IIS หรือแม้กระทั่งใน Apache แต่ก็ไม่มีตัวเลือกให้พวกเขาเข้าถึงการกำหนดค่า nginx โดยตรง ฉันเห็นว่าไม่มีการสนับสนุน nginx สำหรับ.htaccessไฟล์ที่ฉันสามารถให้การเข้าถึงได้และฉันก็ไม่ต้องการให้สิทธิ์การเขียนเพื่อเข้าถึงไฟล์ conf ที่ nginx รวมอยู่ด้วย ฉันคาดว่าการตลาดของเราจะหยุดการตั้งค่า nginx ของเราภายในไม่กี่ชั่วโมง มีความเป็นไปได้ที่ปลอดภัยโดยไม่ให้พวกเขาเข้าถึงหัวใจของเครื่องถ่วงโหลดของเราหรือไม่?
15 nginx  rewrite 

3
การกำหนดคำร้องขอจริงต่อวินาทีสำหรับเว็บเซิร์ฟเวอร์
ฉันกำลังตั้งค่าสแต็ก nginx และปรับการตั้งค่าให้เหมาะสมก่อนที่จะเผยแพร่ การเรียกใช้ ab เพื่อทดสอบเครื่องฉันรู้สึกผิดหวังที่เห็นสิ่งที่เติมออกมาที่ 150 คำร้องขอต่อวินาทีโดยมีคำขอจำนวนมากที่ใช้เวลา> 1 วินาทีเพื่อส่งคืน อย่างแปลกประหลาดตัวเครื่องเองไม่ได้หายใจลำบาก ในที่สุดฉันก็คิดว่าจะ ping กล่องและเห็นเวลา ping ประมาณ 100-125 ms (เครื่องแปลกใจของฉันอยู่ทั่วประเทศ) ดังนั้นดูเหมือนว่าเวลาแฝงของเครือข่ายมีอิทธิพลเหนือการทดสอบของฉัน ใช้การทดสอบเดียวกันจากเครื่องในเครือข่ายเดียวกันกับเซิร์ฟเวอร์ (ping คูณ <1ms) และฉันเห็น> 5,000 คำขอต่อวินาทีซึ่งสอดคล้องกับสิ่งที่ฉันคาดหวังจากเครื่องมากขึ้น แต่นี่ทำให้ฉันคิดว่า: ฉันจะกำหนดและรายงานการวัดคำขอจริง "ต่อวินาที" สำหรับเว็บเซิร์ฟเวอร์ได้อย่างไร คุณเห็นการอ้างสิทธิ์เสมอเกี่ยวกับประสิทธิภาพ แต่ไม่ควรคำนึงถึงเวลาในการตอบสนองของเครือข่าย แน่นอนว่าฉันสามารถให้บริการ 5,000 เครื่องต่อวินาทีไปยังเครื่องที่อยู่ถัดจากเซิร์ฟเวอร์ แต่ไม่ใช่เครื่องทั่วประเทศ หากฉันมีการเชื่อมต่อที่ช้ามากพวกเขาจะส่งผลกระทบต่อประสิทธิภาพของเซิร์ฟเวอร์ในที่สุดใช่ไหม หรือฉันกำลังคิดเกี่ยวกับสิ่งนี้ผิดทั้งหมด? ยกโทษให้ฉันถ้านี่คือวิศวกรรมเครือข่าย 101 สิ่ง ฉันเป็นผู้พัฒนาโดยการค้า อัปเดต:แก้ไขเพื่อความชัดเจน

3
SSH ผ่าน HTTPS พร้อมกับ proxytunnel และ nginx
ฉันพยายามตั้งค่า ssh ผ่านการเชื่อมต่อ https โดยใช้ nginx ฉันไม่พบตัวอย่างการทำงานใด ๆ ดังนั้นความช่วยเหลือจะได้รับการชื่นชม! ~$ cat .ssh/config Host example.net Hostname example.net ProtocolKeepAlives 30 DynamicForward 8118 ProxyCommand /usr/bin/proxytunnel -p ssh.example.net:443 -d localhost:22 -E -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)" ~$ ssh user@example.net Local proxy ssh.example.net resolves to 115.xxx.xxx.xxx Connected to ssh.example.net:443 (local proxy) Tunneling …
15 ssh  nginx  ssl  proxy  http-proxy 

2
Nginx proxy_read_timeout เทียบกับ proxy_connect_timeout
ฉันเริ่มใช้ Nginx เป็น reverse proxy สำหรับชุดเซิร์ฟเวอร์ที่ให้บริการบางประเภท บริการอาจค่อนข้างช้าในบางครั้ง (การทำงานบน Java และ JVM บางครั้งอาจติดอยู่ใน "การรวบรวมขยะเต็ม" ซึ่งอาจใช้เวลาหลายวินาที) ดังนั้นฉันจึงตั้งค่าเป็นproxy_connect_timeout2 วินาทีซึ่งจะทำให้ Nginx มีเวลาพอที่จะคิด ออกว่าบริการติดอยู่ใน GC และจะไม่ตอบสนองในเวลาและมันควรจะผ่านการร้องขอไปยังเซิร์ฟเวอร์ที่แตกต่างกัน ฉันยังได้ตั้งค่าproxy_read_timeoutเพื่อป้องกันไม่ให้พร็อกซีย้อนกลับติดขัดหากบริการใช้เวลามากเกินไปในการคำนวณการตอบสนอง - อีกครั้งควรย้ายคำร้องขอไปยังเซิร์ฟเวอร์อื่นที่ควรจะว่างพอที่จะตอบกลับในเวลาที่เหมาะสม ฉันใช้การวัดประสิทธิภาพบางอย่างและฉันสามารถเห็นได้อย่างชัดเจนว่าการproxy_connect_timeoutทำงานอย่างถูกต้องตามที่คำขอบางอย่างกลับมาตรงตามเวลาที่กำหนดไว้สำหรับการหมดเวลาการเชื่อมต่อเนื่องจากบริการติดขัดและไม่ยอมรับการเชื่อมต่อขาเข้า (บริการกำลังใช้ Jetty ภาชนะ servlet) proxy_read_timeoutยังทำงานที่ฉันสามารถดูการร้องขอว่าการกลับมาหลังจากที่หมดเวลาที่ระบุไว้มี ปัญหาคือฉันคาดว่าจะเห็นคำขอบางอย่างที่หมดเวลาหลังจากproxy_read_timeout + proxy_connect_timeoutนั้นหรือเกือบระยะเวลานั้นถ้าบริการค้างอยู่และไม่ยอมรับการเชื่อมต่อเมื่อ Nginx พยายามเข้าถึงมัน แต่ก่อนที่ Nginx จะหมดเวลา - มันจะถูกปล่อยออกมา และเริ่มการประมวลผล แต่ช้าเกินไปและ Nginx จะยกเลิกเนื่องจากการหมดเวลาอ่าน ฉันเชื่อว่าบริการดังกล่าวมีกรณีดังกล่าว แต่หลังจากใช้การวัดประสิทธิภาพหลายครั้งรวมคำขอหลายล้านรายการ - ฉันไม่เห็นคำขอเดียวที่ส่งคืนสิ่งใด ๆ ข้างต้นproxy_read_timeout(ซึ่งเป็นการหมดเวลาที่มากขึ้น) …
15 nginx  proxy  timeout 

2
เคล็ดลับในการเพิ่มคำขอ Nginx ให้ได้มากที่สุด / วินาที?
ฉันกำลังสร้างแพคเกจการวิเคราะห์และข้อกำหนดของโครงการระบุว่าฉันต้องการการสนับสนุน 1 พันล้านครั้งต่อวัน ใช่ "พันล้าน" กล่าวอีกนัยหนึ่งคือไม่น้อยกว่า 12,000 ครั้งต่อวินาทีที่ยั่งยืนและโดยเฉพาะอย่างยิ่งบางห้องที่จะระเบิด ฉันรู้ว่าฉันจะต้องใช้เซิร์ฟเวอร์หลายเครื่องสำหรับเรื่องนี้ แต่ฉันพยายามที่จะเพิ่มประสิทธิภาพสูงสุดของแต่ละโหนดก่อนที่จะ "ทิ้งฮาร์ดแวร์เพิ่มเติม" ตอนนี้ฉันมีส่วนติดตามที่สำเร็จแล้วและได้รับการปรับปรุงให้ดีที่สุด ฉันสวยมากเพียงแค่บันทึกคำขอลงใน Redis (สำหรับการประมวลผลในภายหลังด้วย Hadoop) แอปพลิเคชั่นนี้คือ Python / Django ที่มี gunicorn สำหรับเกตเวย์ เซิร์ฟเวอร์ 2GB Ubuntu 10.04 Rackspace ของฉัน (ไม่ใช่เครื่องที่ใช้งานจริง) สามารถให้บริการไฟล์คงที่ประมาณ 1200 ไฟล์ต่อวินาที (ทำการเปรียบเทียบโดยใช้ Apache AB กับสินทรัพย์คงที่เดียว) ในการเปรียบเทียบหากฉันสลับลิงก์ไฟล์คงที่กับลิงก์ติดตามของฉันฉันยังได้รับประมาณ 600 คำขอต่อวินาที - ฉันคิดว่านี่หมายความว่าตัวติดตามของฉันได้รับการปรับให้เหมาะสมเพราะมันเป็นเพียงปัจจัย 2 ช้ากว่าการแสดงเนื้อหาแบบคงที่เดียวกัน ซ้ำแล้วซ้ำเล่า อย่างไรก็ตามเมื่อฉันเปรียบเทียบกับความนิยมหลายล้านครั้งฉันสังเกตเห็นบางสิ่ง - ไม่มีการใช้ดิสก์ - คาดว่าเป็นเพราะฉันได้ปิดบันทึก …

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