Friday, October 24, 2014

Create alias path virtual host Nginx

Related
  • http://juuier.blogspot.com/2014/10/config-virtual-hosts-nginx-in-debian.html
  • http://juuier.blogspot.com/2014/10/installing-nginx-with-php5-and-php-fpm_22.html
Solved
  • modify vhost config
sudo nano /etc/nginx/sites-available/myhost.com
  • จากนั้นทำการเพิ่ม box location ของ alias ให้อยู่ภายใต้ box ของ vhost ดังตัวอย่างเช่น ใน default จะมี location /doc/ {...} อยู่ภายใน server {} ประมาณนั้น ให้เราประยุกแบบ /doc/
  • สมมุติต้องการสร้าง alias th เราต้องเพิ่ม location /th/ {...} จะได้ประมาณนี้
server {
listen   80; ## listen for ipv4; this line is default and implied
# listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

root /media/www/home;
index index.php index.html index.htm;

# Make site accessible from http://localhost/
server_name myhost.com www.myhost.com;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}

location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}

location /th {
alias /path/to/th/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;

location ~ \.php$ {
        fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
        # fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        }
}
}
  • สังเกตุว่าภายใน location /th/ {...} จะมี box location ~ \.php$ {...} ด้วย ซึ่งตัวอย่างของ location /doc {...} มันไม่มีนะ 
  • box location ~ \.php$ {...} ที่ต้องใส่ไว้ใต้ /th/ เพราะว่า ให้มันรัน PHP ด้วย ถ้าไม่ใส่อันนี้ภายในของ box location /th/ {...} ตัว alias /th/ นี้จะรัน PHP ไม่ได้เลย จะรันได้เฉพาะ myhost.com เท่านั้นเพราะภายใต้ server {...} ของ myhost.com จะมี box location ~ \.php${...} อยู่ด้วย
  • ข้อสังเกตุอีกอย่าง location /th{...} กับ location /th/ {...} ต่างกันนะครับ แนะนำให้ใช้แบบ /th เฉยๆ ไม่ต้องมี slash ต่อท้ายนะ
  • ถ้าเราตั้ง location /th/ {...} ตอนเราพิมพ์ url ใน browser ต้องพิมพ์ www.myhost.com/th/ คือ ต้องพิมพ์ slash ต่อท้ายด้วย ถ้าไม่พิมพ์ มันจะแสดง 500 Internal Server Error นะครับพี่น้อง 
  • แต่ถ้าเราสร้าง alias แบบ location /th เมื่อเราพิมพ์ url บน browser ทั้งสองแบบ myhost.com/th หรือ myhost.com/th/ มันก็จะเข้าเว็บได้เหมือนกัน ไม่มีปัญหาอะไรให้กวนใจครับ
  • หรือ ง่ายๆ ก็สร้าง sub เว็บภายใต้ root มันจะมีผลเหมือนเราสร้าง alias แบบ location /th {...} เลยง่ายกว่าสร้าง alias อีก แล้วเราจะทำให้มันยุ่งยากทำไมวะ
อ้างอิง
  • http://serverfault.com/questions/565425/nginx-alias-php-fpm-file-not-found

No comments:

Post a Comment