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

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

1
เปลี่ยนเส้นทางคำขอทั้งหมดไปยัง HTTPS ยกเว้นไดเรกทอรีย่อยเดียว
ฉันกำลังพยายามย้ายจากใบรับรองที่ลงชื่อด้วยตนเองไปเป็น Let's เข้ารหัสใบรับรองบนเว็บเซิร์ฟเวอร์ nginx ของฉัน ขณะนี้ฉันเปลี่ยนเส้นทางคำขอทั้งหมดไปhttp/80ยังhttps/443ซึ่งใช้ใบรับรองที่ลงชื่อด้วยตนเองที่ฉันสร้างขึ้นเมื่อไม่นานมานี้ ตอนนี้ - จากสิ่งที่ฉันเข้าใจ Let's Encrypt ส่งคำขอไปที่พอร์ต 80 (เนื่องจากฉันใช้webrootตัวเลือกcertbot) คำขอเหล่านี้จะถูกเปลี่ยนเส้นทางซึ่งทำให้การสร้างใบรับรองไม่สำเร็จ ฉันพยายามทำสิ่งนี้ด้วยบล็อกเซิร์ฟเวอร์ต่อไปนี้ฟังที่พอร์ต 80: server { listen 80; server_name sub.domain.tld; server_tokens off; location /.well-known { root /var/www/letsencrypt; } location / { return 301 https://$host$request_uri; } } แต่คำขอจะ/.well-knownถูกเปลี่ยนเส้นทางไปยังhttps/443ใด ๆ ฉันจะเปลี่ยนเส้นทางคำขอทั้งหมดจากhttp/80ไปยังhttps/443ยกเว้นคำขอไปยังได้/.well-known/อย่างไร

1
ทำไมรูปแบบของ nginx $ ssl_client_i_dn เปลี่ยนไปในทันที
เราใช้ใบรับรองด้านลูกค้าสำหรับการตรวจสอบหนึ่งในลูกค้าของเรา การตั้งค่าของเราคือ: เรามี nginx ต่อหน้าแอปพลิเคชั่น Django ในการตั้งค่า Nginx ของเราเรามีพารามิเตอร์ที่ต้องการที่จะได้รับการตรวจสอบฝั่งไคลเอ็นต์ใบรับรองที่เกิดขึ้นจริงในการทำงาน ( ssl_client_certificate, ssl_verify_clientฯลฯ ) และ uwsgi_param X-Client-Verify $ssl_client_verify; uwsgi_param X-Client-DN $ssl_client_s_dn; uwsgi_param X-SSL-Issuer $ssl_client_i_dn; ซึ่งหมายความว่าเราได้รับคุณค่าของตัวแปรเหล่านั้นลงในแอพ Django ของเรา จากนั้นแอป Django จะใช้ข้อมูลนี้เพื่อระบุผู้ใช้ที่กำลังเชื่อมต่อและอนุญาตพวกเขา เราประสบความสำเร็จในการใช้สิ่งนี้เป็นเวลาหลายเดือนโดยไม่มีปัญหาใด ๆ เมื่อเราเริ่มได้รับรายงานเกี่ยวกับคนที่ไม่สามารถเข้าสู่ระบบโดยใช้ใบรับรอง ปรากฏว่ารูปแบบของ$ssl_client_s_dnและ$ssl_client_i_dnค่ามีการเปลี่ยนแปลงจากรูปแบบที่คั่นด้วยเครื่องหมายสแลช: /C=SE/O=Some organziation/CN=Some CA เป็นรูปแบบที่คั่นด้วยเครื่องหมายจุลภาค: CN=Some CA,O=Some organization,C=SE การแก้ปัญหานี้เป็นเรื่องง่าย แต่ฉันไม่เข้าใจว่าทำไม ดังนั้นคำถามของฉันเป็นจริง: คุณค่าของการ$ssl_client_s_dnมาจากที่ใด มันถูกกำหนดโดย nginx? ลูกค้า? มีเอกสาร / ข้อมูลจำเพาะของรูปแบบที่ค่านี้สามารถมีและมีชื่อหรือไม่?

5
nginx stop / reload บน windows ล้มเหลวสำหรับ Access ถูกปฏิเสธ
ฉันใช้งาน nginx บน Windows Server 2008 R2 (x64) เป็นบริการ windows ฉันใช้ Windows Service Wrapper สำหรับสิ่งนั้น (อันที่จริงฉันได้ทำตามบทช่วยสอนนี้: http://mercurial.selenic.com/wiki/HgServeNginxWindows ) บริการกำลังทำงานอยู่ อย่างไรก็ตามเซิร์ฟเวอร์ไม่ประมวลผลสัญญาณ (เช่นหยุด / โหลดซ้ำ) ซึ่งหมายความว่าหากฉันหยุดให้บริการ nginx จะไม่หยุดทำงาน (ฉันต้องฆ่ามัน) และเมื่อฉันต้องการโหลดการกำหนดค่าจากบรรทัดคำสั่ง: C:\Users\Administrator>E:\apath\nginx\nginx.exe -p E:\apath\nginx -c E:\apath\nginx.conf -s reload มันออก: nginx: [error] OpenEvent("Global\ngx_reload_4268") failed (5: Access is denied) ฉันใช้คำสั่งในฐานะผู้ดูแลระบบและบริการกำลังทำงานภายใต้ผู้ใช้ NETWORK SERVICE คำแนะนำหรือปัญหาที่คล้ายกัน?

3
เป็นไปได้หรือไม่ที่จะบันทึกข้อมูลการตอบสนองในบันทึกการเข้าใช้ nginx?
ฉันพยายามพิมพ์ข้อมูลการตอบกลับเพื่อการพัฒนา / การดีบัก ฉันไม่พบคำถามที่คล้ายกันหรือข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ ถ้าคุณทำโปรดเพิ่มความคิดเห็น
13 nginx 

2
Nginx หลายราก
ฉันต้องการเบี่ยงเบนความสนใจไปยังไดเรกทอรีย่อยหนึ่ง ๆ ไปยังตำแหน่งรากอื่น อย่างไร? บล็อกที่มีอยู่ของฉันคือ: server { listen 80; server_name www.domain.com; location / { root /home/me/Documents/site1; index index.html; } location /petproject { root /home/me/pet-Project/website; index index.html; rewrite ^/petproject(.*)$ /$1; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html …

4
วิธีตั้งค่า robots.txt แบบโกลบอลเป็น nginx สำหรับโฮสต์เสมือนทั้งหมด
ฉันกำลังพยายามตั้งค่าrobots.txtสำหรับโฮสต์เสมือนทั้งหมดภายใต้เซิร์ฟเวอร์ nginx http ฉันสามารถทำได้ใน Apache โดยใส่สิ่งต่อไปนี้เป็นหลักhttpd.conf: <Location "/robots.txt"> SetHandler None </Location> Alias /robots.txt /var/www/html/robots.txt ฉันพยายามทำสิ่งที่คล้ายกับ nginx โดยเพิ่มบรรทัดที่ระบุด้านล่าง (a) ภายใน nginx.conf และ (b) รวม conf.d / robots.conf location ^~ /robots.txt { alias /var/www/html/robots.txt; } ฉันได้ลองกับ '=' และแม้แต่วางไว้ในโฮสต์เสมือนหนึ่งเพื่อทดสอบ ดูเหมือนจะไม่มีอะไรทำงาน ฉันหายไปนี่อะไร มีวิธีอื่นในการบรรลุเป้าหมายนี้หรือไม่?
13 nginx  robots.txt 

3
เขียน http ใหม่เพื่อ https ด้วย ngnix หลัง load balancer
ฉันกำลังใช้ load balancer ของ Rackspace ซึ่งทำให้ฉันสามารถตั้งค่าคีย์ ssl / pem ภายในแผงควบคุมของผู้ดูแลระบบได้ ทุกอย่างทำงานได้ดีฉันสามารถใช้ทั้งโปรโตคอล http และ https แต่ถ้าฉันพยายามเปลี่ยนเส้นทาง http เป็น https โดยใช้: server{ listen *:80; server_name mydomain.com www.mydomain.com; rewrite ^ https://mydomain.com$request_uri? permanent; ... ฉันได้รับการวนรอบการเปลี่ยนเส้นทาง ฉันรู้ว่าฉันไม่ได้ฟังพอร์ต 443 แต่นั่นเป็นเพราะ load balancer จัดการสำหรับฉัน ฉันยังลองตัดคำสั่งเขียนใหม่อีกครั้งif ($scheme ~* http){เพื่อไม่เกิดประโยชน์ อีกส่วนหนึ่งของคำถามของฉันคือฉันต้องการลบ www จาก url ฉันสามารถทำสิ่งนี้ด้วยการเขียนซ้ำครั้งเดียวได้หรือไม่ ไม่ควรเขียนข้างต้นดูแลนี้เช่นกัน? ขอบคุณสำหรับความช่วยเหลือของคุณ!

4
nginx ย้อนกลับหัวข้อที่กำหนดเอง
ฉันมีตัวอย่างต่อไปนี้ location / { proxy_read_timeout 2000; proxy_next_upstream error; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass_header X_CUSTOM_HEADER; proxy_redirect off; proxy_max_temp_file_size 0; proxy_pass https://prod; break; } ตอนนี้เมื่อฉันใช้สายขดต่อไปนี้ curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test ตอนนี้ไม่ทำงาน .. apache / php บนแบ็กเอนด์ไม่เห็นส่วนหัว ถ้าฉันข้าม nginx มันใช้งานได้ curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

2
คำนำหน้า Nginx http ในเซิร์ฟเวอร์ upstream
ฉันกำลังพยายามใช้ nginx เพื่อส่งผ่านพร็อกซีไปยังคอนเทนเนอร์นักเทียบท่าสองแห่ง นี่คือไฟล์ upstream conf ของฉัน: upstream api_servers { server http://192.168.49.4:49155; server http://192.168.49.4:49156; } นี่คือสิ่งที่ฉันพยายามโหลด: nginx: [emerg] invalid host in upstream "http://192.168.49.4:49155" in /etc/nginx/conf.d/api_upstream.conf:3 nginx: configuration file /etc/nginx/nginx.conf test failed เมื่อฉันลบ http: // คำนำหน้าข้อผิดพลาดหยุดเกิดขึ้น ทำไมถึงเป็นอย่างนั้น?
12 centos  nginx  vagrant 

1
วิธีกำหนดค่า nginx เพื่อให้ทำงานกับ Express ได้อย่างไร
ฉันพยายามกำหนดค่า nginx ดังนั้นจึงproxy_passขอให้แอปโหนดของฉัน คำถามเกี่ยวกับ StackOverflow มี upvotes มากมาย: /programming/5009324/node-js-nginx-and-nowและฉันใช้ config จากที่นั่น (แต่เนื่องจากคำถามเกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์มันควรจะอยู่ใน ServerFault) นี่คือการกำหนดค่า nginx: server { listen 80; listen [::]:80; root /var/www/services.stefanow.net/public_html; index index.html index.htm; server_name services.stefanow.net; location / { try_files $uri $uri/ =404; } location /test-express { proxy_pass http://127.0.0.1:3002; } location /test-http { proxy_pass http://127.0.0.1:3003; } } ใช้โหนดธรรมดา: …

1
nginx rewrite ของฉันกำลังดาวน์โหลดไฟล์ php
ฉันมีกฎการเขียนซ้ำต่อไปนี้ที่ฉันพยายาม: location / { index index.php index.html; rewrite ^/test$ /test.php break; } และฉันก็มี: location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /home/sites/default$fastcgi_script_name; fastcgi_index index.php; } ไฟล์ php ปกติใช้งานได้ แต่ดูเหมือนว่าการเปลี่ยนเส้นทางของฉันเป็นเพียงการดาวน์โหลดไฟล์ php ที่ฉันเปลี่ยนเส้นทางไปแทนที่จะแยกวิเคราะห์ ฉันกำลังคิดถึงอะไร ฉันได้รับไฟล์ที่โหลดแทนที่จะดาวน์โหลดโดยใส่ fastcgi ในบล็อกตำแหน่งแรก แต่ก็ยังไม่ได้แยกวิเคราะห์เป็น php
12 php  nginx  rewrite 

1
วิธีกำหนดใบรับรอง SSL ที่ nginx ส่งครั้งแรกด้วย SNI
ฉันใช้ nginx 1.2.7 กับ OpenSSL 0.9.8o บน Debian Squeeze ประมาณ 30 โดเมน ในสองพวกเขาฉันเปิดใช้งาน SSL ซึ่งทำงานได้ดีทั้ง SSL config ใช้สำหรับทั้งสองโดเมน: listen 443 ssl; ssl_certificate /etc/nginx/ssl/example.org-unified.crt; ssl_certificate_key /etc/nginx/ssl/example.org.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security max-age=600000; การตรวจสอบทั้งสองโดเมนด้วยตัวตรวจสอบ ssllabs.com ฉันจะได้รับหนึ่งโดเมนการแจ้งเตือน "ไซต์นี้ใช้งานได้เฉพาะในเบราว์เซอร์ที่มีการสนับสนุน SNI" สำหรับโดเมนอื่นฉันไม่ได้รับข้อความนี้ ดูเหมือนว่า nginx โดยค่าเริ่มต้นจะส่งใบรับรองสำหรับโดเมนแรกตามลำดับตัวอักษรไปยังไคลเอนต์โดยไม่มีการสนับสนุน SNI …
12 nginx  ssl  sni 

3
Nginx รวมถึงไฟล์ปรับแต่งที่ไม่ได้อยู่ในลำดับ?
ลำดับที่ Nginx รวมถึงไฟล์การกำหนดค่าคงที่หรือไม่หรือไม่ Apache ระบุอักขระไวด์การ์ดอย่างชัดเจนในลำดับตัวอักษร ด้วย Nginx ดูเหมือนว่าสิ่งนี้จะไม่มีผลบังคับใช้และคู่มือจะไม่พูดอะไรเลย ในการตั้งค่าของฉัน20_example.comถูกรวมไว้ก่อนหน้า00_defaultนี้ซึ่งเอาชนะจุดประสงค์ของฉันในการกำหนดคำสั่งที่แชร์ (เช่นรูปแบบไฟล์บันทึก) ที่นั่น

2
Reverse proxy สำหรับไดเรกทอรีย่อยใน nginx
ฉันต้องการตั้งค่า Reverse proxy ใน VPS ของฉันสำหรับแอพ Heroku ของฉัน ( http://lovemaple.heroku.com ) ดังนั้นหากฉันเข้าชมmysite.com/blogฉันจะได้รับเนื้อหาในhttp://lovemaple.heroku.com ผมทำตามคำแนะนำบนวิกิพีเดียอาปาเช่ location /couchdb { rewrite /couchdb/(.*) /$1 break; proxy_pass http://localhost:5984; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ฉันเปลี่ยนให้เหมาะกับสถานการณ์ของฉัน: location /blog { rewrite /blog/(.*) /$1 break; proxy_pass http://lovemaple.heroku.com; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } …

4
คุณจะรวมไฟล์ไว้ใน Nginx vhost แบบมีเงื่อนไขได้อย่างไร
ในบรรทัดด้านล่างฉันอาจมีไฟล์กำหนดค่าเฉพาะไซต์ที่มีfastcgi_paramsเพิ่มเติมที่ไม่ซ้ำกับไซต์นั้น หากไฟล์นี้มีอยู่ฉันต้องการโหลด server { listen 80 default; server_name _; root /path/www/$host; # Pass PHP scripts to php-fastcgi listening on port 9000 location ~ \.php { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; if (-f /path/www/$host/nginx.conf) { include /path/www/$host/nginx.conf; } } } อย่างไรก็ตามสิ่งนี้ไม่ได้ผลและข้อผิดพลาดที่ฉันได้รับคือ: nginx: [ฉุกเฉิน] "รวม" ไม่อนุญาตให้สั่งที่นี่ใน ... ปรับปรุง ฉันคิดว่าแทนที่จะตรวจสอบแยกฉันสามารถให้รวมถึงการตรวจสอบสำหรับฉัน server { listen 80 …

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