Wildcard vhosts บน Nginx


25

ฉันเพิ่งติดตั้ง Nginx บนเซิร์ฟเวอร์ของฉันและมีความสุขมากกับผลลัพธ์อย่างไรก็ตามฉันยังไม่สามารถหาวิธีแทรกโฮสต์เสมือนจริงได้

นี่คือโครงสร้าง [ไดเรกทอรี] ที่ฉันต้องการ:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

อย่างที่คุณเห็นว่ามันค่อนข้างง่าย แต่ฉันต้องการความสามารถในการเพิ่มโดเมนโดยเพิ่มระเบียน A สำหรับโดเมนย่อยใหม่ซึ่งจะชี้ไปยังไดเรกทอรีย่อยของชื่อเดียวกันภายใต้ public_html

มีบางสิ่งในเว็บ แต่ฉันไม่ได้เจออะไรแบบนี้

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.


ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดย "ไดเรกทอรีย่อยที่มีชื่อเดียวกัน" เมื่อตัวอย่างของคุณมีสองชื่อที่แตกต่างกัน: subdomain 1/ x.example.com- คุณสามารถชี้แจง?
nickgrim

จริงไม่ชัดเจนมากขอโทษ ให้บอกว่าฉันมีโดเมนย่อย x.example.com ไดเรกทอรีนั้นจะเป็น / public_html / x อย่างไรก็ตามฉันต้องการทั้ง example.com และ www.example.com เพื่อชี้ไปที่ / public_html /
rorygilchrist

คำตอบ:


39

ฉันจะแสดงให้คุณ

ไฟล์การกำหนดค่า

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

ทดสอบไฟล์

เรามีไฟล์ทดสอบสองไฟล์:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

การทดสอบ

ชื่อเซิร์ฟเวอร์แบบคงที่:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

และชื่อเซิร์ฟเวอร์ regexp:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

ไม่ได้ผล โดเมนย่อยทั้งหมดเพียงชี้ไปที่ public_html นี่คือการกำหนดค่าเซิร์ฟเวอร์ที่สอง:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist

4
"ไม่ทำงานโชคไม่ดี" ไม่ให้รายละเอียดอย่างน่าเสียดาย ค้นหา nginx error.log เสมอเพื่อดูรายละเอียด ฉันได้อัปเดตคำตอบของฉันเพื่อแสดงให้คุณเห็นว่าการกำหนดค่านี้ทำงานอย่างไร คุณสามารถดูรุ่น Nginx ของฉันคือ 0.8.54
Alexander Azarov

ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันตอนนี้
Claire Furney

5

ไฟล์การกำหนดค่า Nginx ด้านล่างนี้อนุญาตให้ใช้ชื่อโฮสต์ตัวแทนที่กำหนดเส้นทางแบบไดนามิกไปยังโฟลเดอร์ที่เกี่ยวข้องใน/var/www/vhost/ขณะเดียวกันก็สร้างไฟล์บันทึกตามลำดับ

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

กรุณาอธิบายวิธีการแก้ปัญหาของคุณ
Andrew Schulman

สิ่งนี้ดูเหมือนจะเหมือนกับคำตอบที่มีอยู่จริง สิ่งนี้เพิ่มอะไร?
Michael Hampton

1
ให้ความพิเศษมากกว่าเล็กน้อย หวังว่ามันจะช่วยให้ทุกคน
AnthumChris

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