สมมติว่าฉันต้องการเปลี่ยนเส้นทางจาก www.example.com เป็น example.com และฉันต้องการใช้ nginx ฉันมองไปรอบ ๆ และไม่เห็นเอกสารที่ดีเกี่ยวกับเรื่องนี้ดังนั้นฉันจึงคิดว่าฉันจะถามและตอบคำถามของฉันเอง
สมมติว่าฉันต้องการเปลี่ยนเส้นทางจาก www.example.com เป็น example.com และฉันต้องการใช้ nginx ฉันมองไปรอบ ๆ และไม่เห็นเอกสารที่ดีเกี่ยวกับเรื่องนี้ดังนั้นฉันจึงคิดว่าฉันจะถามและตอบคำถามของฉันเอง
คำตอบ:
ฉันยังดูสิ่งนี้ในวิกิ Nginx และบล็อกอื่น ๆ และวิธีที่ดีที่สุดที่ชาญฉลาดคือการทำสิ่งต่อไปนี้:
หากต้องการเปลี่ยนเส้นทางจาก www.example.com ไปที่ example.com โดยใช้ nginx (เวอร์ชัน 1.0.12 ขณะเขียน)
server {
server_name www.example.com;
rewrite ^ $scheme://example.com$request_uri permanent;
# permanent sends a 301 redirect whereas redirect sends a 302 temporary redirect
# $scheme uses http or https accordingly
}
server {
server_name example.com;
# the rest of your config goes here
}
เมื่อมีคำขอมาที่ example.com จะไม่มีการใช้คำสั่งเพื่อประสิทธิภาพ และใช้ $ request_uri แทนที่จะต้องสร้างการแข่งขัน $ 1 ซึ่งจะเก็บภาษีการเขียนใหม่ (ดูหน้า Nginx Pitfalls สามัญ)
แหล่งที่มา:
หลังจากขุดไปเรื่อย ๆ และนับครั้งไม่ถ้วนนี่คือคำตอบ gotcha ที่ฉันพบคือต้องใช้ " http://example.com $ uri" การแทรก / ด้านหน้าของ $ uri ส่งผลให้เปลี่ยนเส้นทางไปที่http://example.com //
server {
listen 80;
server_name www.example.com;
rewrite ^ http://example.com$uri permanent;
}
# the server directive is nginx's virtual host directive.
server {
# port to listen on. Can also be set to an IP:PORT
listen 80;
# Set the charset
charset utf-8;
# Set the max size for file uploads to 10Mb
client_max_body_size 10M;
# sets the domain[s] that this vhost server requests for
server_name example.com;
# doc root
root /var/www/example.com;
# vhost specific access log
access_log /var/log/nginx_access.log main;
# set vary to off to avoid duplicate headers
gzip off;
gzip_vary off;
# Set image format types to expire in a very long time
location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ {
access_log off;
expires max;
}
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
# Catchall for everything else
location / {
root /var/www/example.com;
access_log off;
index index.html;
expires 1d;
if (-f $request_filename) {
break;
}
}
}
กรุณาเยี่ยมชมคำถามนี้ใน SO: https://stackoverflow.com/a/11733363/846634
จากคำตอบที่ดีกว่า:
จริงๆแล้วคุณไม่จำเป็นต้องมีการเขียนซ้ำ
server {
#listen 80 is default
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
#listen 80 is default
server_name example.com;
## here goes the rest of your conf...
}
ตามคำตอบของฉันคือการได้รับคะแนนโหวตมากขึ้นเรื่อย ๆ คุณไม่ควรใช้ a rewrite
ในบริบทนี้ ทำไม? เพราะ nginx ต้องดำเนินการและเริ่มการค้นหา หากคุณใช้return
(ซึ่งควรมีในเวอร์ชัน nginx) จะหยุดการทำงานโดยตรง สิ่งนี้เป็นที่ต้องการในทุกบริบท
หากต้องการเปลี่ยนเส้นทางไปที่ไม่ใช่ www ให้แก้ไขไฟล์ vhost:
server {
listen 80;
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
'ถาวร' เปลี่ยนการเปลี่ยนเส้นทางเป็นการเปลี่ยนเส้นทาง 301 หลังจากบล็อกรหัสนี้คุณสามารถกำหนดค่าโดเมนโดยไม่มี www
สำหรับการเปลี่ยนเส้นทางที่ไม่ใช่ www ไปยัง www:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) http://www.example.com/$1 permanent;
}
Thassit
BTW สำหรับการตั้งค่า VPS เต็มรูปแบบโดยใช้ Nginx ลองดู VPS Bible บนเว็บไซต์ของฉัน guvnr.com และฉันหวังว่ามันจะเป็นประโยชน์!
นี่คือสิ่งที่ฉันใช้:
# ---------------------------------------
# vHost www.example.com
# ---------------------------------------
server {
##
# Redirect www.domain.tld
##
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
# ---------------------------------------
# vHost example.com
# ---------------------------------------
server {
# Something Something
}
server {}
บล็อกการกำหนดค่าหลัก