Tag Archive iis

IIS: การเตรียม site (พื้นที่) สำหรับเว็บ

บางครั้งก็ต้องเซ็ตให้ server เดียวกันมี domain หลายตัว หรือสร้างเว็บที่มีหลาย port ตัว iis ก็ทำได้เหมือน apache เช่นกัน

  1. สร้าง folder ขึ้นมาใหม่ใน C:\inetpub\wwwroot เช่น C:\inetpub\wwwroot\documentRoot หรือไว้ที่อื่นก็ได้
  2. เซ็ต folder permission ให้ user ที่เหมาะสมสามารถเขียนและแก้ไขไฟล์ได้
  3. เปิดโปรแกรม Internet Information Services (IIS) Manager
  4. คลิกขวาที่ Sites เลือก add website
    Site name
    ให้ใส่ชื่อเว็บไซต์ เช่น panpan UAT
    Application pool:
    เลือก envalument ที่สามารถ run php ได้เช่น PHP 7.3 UAT หรือ DefaultAppPool
    Physical path
    ให้ใส่ path folder ที่สร้างในขั้นตอนที่ 1 หรือชี้ไป folder public เช่น C:\www\panpan_v1_UAT\public
    IP address
    ถ้าไม่ระบุใช้ใช้ ALL Unassigned
    Port
    เลขตั้งแต่ 0 – 65536 ที่นิยมคือ 80 และ 8080
  5. คลิก OK
  6. ใน message box คลิก yes

IIS: การตั้ง Virtual Directory

iis เดิมมีเว็บที่เป็น c# อยู่แล้วและไม่สะดวกที่จะเพิ่ม domain name เข้าไปใหม่ จะตั้งเป็น site ให้ใช้อีก port ก็ติด firewall ที่ยอมให้ใช้ port 80 เท่านั้น และเพื่อความปลอดภัย framework อย่าง laravel ไม่ควรวาง folder ให้สามารถเรียกใช้ php ไฟล์อื่นได้นอกจาก /public/index.php จึงเลือกที่ใช้วิธี Virtual Directory คือ การสร้าง folder ใน url ให้ชี้ไปอีก folder ที่อยู่นอก C:\inetpub\wwwroot

การตั้ง Virtual Directory

  1. เปิดโปรแกรม Internet Information Services (IIS) Manager
  2. คลิกขวาที่ site ที่ต้องการ เช่น Default Web Site
  3. Add Virtual Directory
    Alias
    คือ folder จำลอง เช่น punpun_uat
    Physical path:
    คือ path จริง ที่ทำ shortcut ชี้ไปหา เช่น C:\www\punpun_v1_uat
  4. (ไม่จำเป็น) คลิกที่ site หรือ server แล้ว restart
  5. ทดสอบโดยเรียก url เช่น http://localhost/punpun_uat

วิธีนี้จะมีข้อดีคือ

  1. สามารถติดตั้งหลายเว็บ โดยใช้ domain และ port เดียวกันได้
  2. สามารถควบคุมการเข้าถึงไฟล์ที่ไม่ต้องการได้เช่น ถ้าวาง file ของ larave ไว้ใน C:\inetpub\wwwroot ตามปกติ ผู้ไม่หวังดีสามารถเรียกใช้ไฟล์อื่นๆ นอกจากไฟล์ /public/index.php ได้โดยตรงเช่น ไฟล์ php ที่สามารถ upload ไฟล์ได้โดยไม่มีการตรวจสอบสิทธิทำให้ไม่ปลอดภัย
  3. สามารถรัน code เดียวกันโดยใช้ php หลาย version หรือมี config คนละแบบได้โดยใช้วิธี การติดตั้ง PHP หลายเวอร์ชั่น บน IIS
  4. ซ่อน หรือย้าย folder ที่เก็บงานไปไว้ไดร์อื่น

การติดตั้ง PHP หลายเวอร์ชั่น บน IIS

การติดตั้ง PHP หลายๆ เวอร์ชั่นบน IIS หรือการติดตั้ง UAT และ production server อยู่ในเครื่องเดียวกัน สามารถทำได้โดยใช้ Handler Mappings

การตั้งค่า Handler Mappings

  1. เปิดโปรแกรม Internet Information Services (IIS) Manager
  2. คลิกที่ site ที่ต้องการ, folder ที่จะให้สามารถ run PHP ได้ หรือที่ชื่อ server ถ้าต้องการให้ ทุก site สามารถ run PHP ได้
  3. คลิก Handler Mappings
    Request path:
    *.php
    Module:
    FastCgiModule ถ้าไม่มีให้เลือก GGI เพิ่มในตัวเลือกการติดตั้ง IIS หรืออ่าน note ในหน้า Using FastCGI to Host PHP Applications on IIS 7
    Executable:
    ใส่ path ชี้ไปที่ php-cgi.exe เช่น C:\Program Files\PHP\v7.2\php-cgi.exe อย่าลืมเปลี่ยนช่องด้านหลังจาก *.dll เป็น *.exe ด้วย
    Name:
    เช่น PHP_via_FastCGI 7.2
  4. คลิก OK
  5. ตอบ Yes
  6. (ไม่จำเป็น) คลิกที่ site หรือ server แล้ว restart
  7. Test

การติดตั้ง PHP บน IIS

มีความจำเป็นบางอย่างที่ทำให้ต้องลง PHP ใน Internet Information Services (IIS) แทน apache / xampp ตามปกติ แต่จริงๆ แล้วมันก็ไม่ได้ติดตั้งยากอะไร แค่มีวิธีการที่ต่างไปจากปกติเท่านั้นเอง

ขั้นตอนการติดตั้้ง

  1. download Web Platform Installer มาติดตั้งก่อน
  2. เปิดโปรแกรม Microsoft Web Platform Installer
  3. มุมขวาบนจะมีช่องให้ search หาส่วนติดตั้งที่ต้องการ เช่น PHP 7.4 โดยมีเคล็ดลับคือ ถ้าต้องลง sql server driver ด้วยให้หา Microsoft Drivers for PHP ที่มี version สูงมากที่สุดก่อน เพราะบางครั้งมี PHP version ใหม่มาแล้วแต่ไม่มี sql driver ให้เลือก เมื่อได้ที่ต้องการแล้วให้คลิก add ไว้ก่อน จากนั้นก็ไปหาส่วนที่ต้องการอื่นๆ ต่อไปเช่น Web Platform Installer ต้องใช้ในการ rewrite url ใน iis
  4. เมื่อได้ครบแล้วคลิก Install
  5. คลิก I Accept
  6. ปิดโปรแกรมเมื่อไม่ต้องการติดตั้งเพิ่มเติมแล้ว

php จะถูกติดตั้งอยู่ใน C:\Program Files\PHP แยกตาม php version เช่น v7.3 โดยจะมี php.ini และ extension ต่างๆ แยกออกมาต่างหาก โดยในบรรทัดล่างๆ จะมี [PHP_WINCACHE] หรือ [ExtensionList] บอกตำแหน่งที่เกี่ยวกับ php / zend entension ที่ได้ถูกติดตั้งเอาไว้

rewrite url ใน iis

โดยปกติ PHP จะใช้ Apache HTTP Server เป็น server ถ้าต้องการให้ URL เรียบร้อยสวยงามก็ใช้ไฟล์ .htaccess แต่ถ้าเราใช้ Internet Information Services (IIS) ก็ต้องไปใช้ไฟล์ ที่คู่กันคือ Web.Config แทน

การที่จะ rewrite url ใน iis จะต้องมีการติดตั้ง URL Rewrite extension เอาไว้ก่อน

ตัวอย่างไฟล์ Web.Config ที่ทำหน้าที่ แปลง ค่าใน url ไปให้ไฟล์ index.php โดยที่จะซ่อนไฟล์ index.php ออกจาก url[code language=”text” title=”Web.Config”]<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="remove index.php" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>[/code]นำไปว่างใน folder ที่ต้องการใช้เช่น folder public ของ laravel เป็นต้น