การทำให้ xampp บริการ ssl

ขั้นตอนการทำให้ xampp บริการ ssl ใน localhost
ซึ่งใช้งานได้จริงกับใน localhost เท่านั้น

1. https://ssl.indexnl.com/
2. กรอก localhost ในช่อง domain
3. download 51398a-localhost.zip
แฟ้มนี้ใครก็ใช้ได้ครับ ถ้ามี domain คือ localhost
https://drive.google.com/open?id=1St..IHKE3
คลาย zip พบ 4 แฟ้ม
– ca.ssl.indexnl.com.crt
– localhost.crt
– localhost.key
– readme.txt
4. ใน readme.txt แนะนำว่า
– มีวิธีติดตั้งที่ https://ssl.indexnl.com/xampp-wamp-ssl/
– มี certificate อายุ 3 เดือนที่ https://wildcard.indexnl.com/
– มี community พูดคุยกันที่ https://community.apachefriends.org/f/
5. คัดลอก 2 แฟ้ม
– localhost.key ไปไว้ใน c:\xampp\apache\conf\ssl.key\
– localhost.crt ไปไว้ใน C:\xampp\apache\conf\ssl.crt\
6. ค้น certmgr พบ manage computer certificates
คลิ๊กเลือก Trusted Root Certification Authorities
ที่บน menu bar คลิ๊ก Action, All tasks, import, next, browse
เลือกแฟ้ม ca.ssl.indexnl.com.crt แล้ว open, next, finish
พบ The import was successful.
7. เข้าห้อง c:\xampp\apache\conf\extra\
แล้วเปิดแฟ้ม httpd-vhosts.conf ด้วย editor
8. เพิ่มบรรทัดต่อไปนี้ ต่อท้ายสุดของแฟ้ม

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot “c:\xampp\htdocs”
ServerName localhost
ServerAlias localhost
ErrorLog “logs/localhost-error.log”
CustomLog “logs/localhost-access.log” common
</VirtualHost>

9. ในแฟ้มเดิม ลบโค้ดเดิม และเพิ่มโค้ดใหม่
ข้างล่างนี้เป็นของใหม่

<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot “c:\xampp\htdocs”
ServerName localhost
ServerAlias localhost
SSLEngine on
SSLCertificateFile “c:\xampp\apache\conf\ssl.crt\localhost.crt”
SSLCertificateKeyFile “c:\xampp\apache\conf\ssl.key\localhost.key”
<FilesMatch “\.(cgi|shtml|phtml|php)$”>
SSLOptions +StdEnvVars
</FilesMatch>
ErrorLog “logs/localhost-error.log”
CustomLog “logs/localhost-access.log” common
</VirtualHost>

10. restart xampp
แล้วเปิด https://localhost

อ่านเพิ่มที่ http://www.thaiall.com/omni/indexo.html

การที่ VirtualBox จะได้ IP จริง และ start httpd พร้อม Host

การที่ VirtualBox จะได้ IP จริง และ start httpd พร้อม Host
มีขั้นตอนดังนี้
1. เปิด VBox แล้วเลือกตั้งค่าให้ Guest ของผมใช้ Win8
2. เลือก เครือข่าย (Network)
เดิมกำหนดเป็น Nat เปลี่ยนเป็น แผงวงจรแบบบริดจ์ (Bridge Adapter)
ใช้ Net บ้าน มี Router แจก IP แบบ Wireless ภายในบ้าน
3. สั่ง Start : Guest
ขณะอยู่ใน Guest ใช้ DOS>ipconfig
พบ IP คือ 192.168.1.4 เป็นของ Guest
4. อยู่ใน Host ใช้ DOS> ipconfig
พบ IP คือ 192.168.1.5 เป็นของ Host
5. ทดสอบติดตั้ง xampp
[xampp-win32-7.1.7-0-VC14-installer.exe]
ทำให้ Guest เปิดบริการ Port 80
ติดตั้งเสร็จก็ Start : Apache
แล้วตรวจสอบว่าบริการที่เปิดไว้ เข้าถึงจากภายนอกได้หรือไม่
6. ตรวจใน Service ไม่พบว่า Apache
ตรวจโดยเข้า DOS>Services.msc ก็ไม่พบว่า Apache อยู่ใน Services
ใช้ DOS เข้า c:\xampp\apache\bin แล้วติดตั้งเป็น Service เอง
เข้า Windows, Command Prompt (Admin) จึงจะติดตั้ง Service ได้
DOS>httpd -k install
ใน Config มุมบนขวาของ XAMPP Control Panel มีบริการ Start Automatic
หากเลือกให้ MySQL เปิดอัตโนมัติ ก็จะ Start Automatic ได้
7. ขณะอยู่ใน Guest หรือ Host
ทดสอบการเปิดบริการ Apache ใน XAMPP
เปิด http://192.168.1.4 พบ Web Server ทั้งคู่
8. การสั่ง Start VBox ผ่าน Shell:startup
DOS>”C:\Program Files\Oracle\VirtualBox\VirtualBox.exe” –startvm mywin8
สร้างแฟ้ม .bat ในห้อง Startup
ต่อไปเวลาเปิดเครื่องก็จะสั่งให้ mywin8 ถูก Start ขึ้นมาอัตโนมัติ
และ Service Apache ก็จะถูกเรียกขึ้นมาโดยอัตโนมัติเช่นกัน

http://www.thaiall.com/handbill/openphotodir.php?folder=../os/virtualbox_win8/

http://www.thaiall.com/os/virtualbox.htm

ทดสอบการทำงานของเครื่องบริการ กับเครื่องลูก

การเชื่อมต่อเข้ามาพร้อมกัน 10 connection
การเชื่อมต่อเข้ามาพร้อมกัน 10 connection

ที่มา ที่ไป
เตรียมสอนนักศึกษาเรื่องศักยภาพของเครื่องบริการ
ไม่ได้อยู่ที่ RAM อย่างเดียว ยังมีรายละเอียดอีกมาก
แม้เครื่องจะอยู่ใน Cloud ก็ยังสุ่มเสี่ยงต่อการเดี้ยงกลางอากาศได้เช่นกัน
เพราะเวลาเช่าเครื่องบริการใน Cloud ก็ต้องกำหนดว่าจะจ่ายให้กับอะไรอยู่ดี

การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว
การเชื่อมต่อเข้ามา 1 connection ก็ยังรับไหว

การทดสอบเครื่องที่ทำงาน
ทดลองใช้เครื่องหนึ่งร้องขอบริการจากอีกเครื่องหนึ่ง
ในที่นี้ desktop2 คือ เครื่องบริการเว็บและอีเมล
ส่วนเครื่อง notebook คือ เครื่องลูกที่ส่ง request ไปยังเครื่องบริการ
ด้วยการเปิดเว็บเพจเดียวกันพร้อม ๆ กัน 10 iframe ใน 1 หน้าต่าง
แต่ละ iframe เรียกไปยัง url แบบส่งค่า get ที่แตกต่าง
และ url คือ php ที่เรียกใช้ smtp ก็จะ load เครื่องบริการเกือบ 50 Kbps
โปรแกรมที่ monitor ใช้ tcpview for windows ซึ่ง download ได้ฟรี
จาก https://technet.microsoft.com/en-us/library/bb897437.aspx
และใช้ task manager ดู performance ของ ethernet ว่าขึ้นลงอย่างไร
เมื่อเครื่อง notebook ส่งคำขอใช้บริการไปยัง desktop2
เครื่องบริการทดสอบเปิดบริการด้วย xampp เฉพาะส่วนของ apache
ถ้าเปิด mercury ก็คงจะทำให้เกิดภาระกับเครื่อง desktop2 ขึ้นอีกเยอะ

ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80
ในขณะที่เครื่องลูกยังไม่ได้เชื่อมต่อเข้ามาผ่าน port 80

สรุปผลการทดสอบเครื่องที่ทำงาน
เครื่อง desktop2 เป็นเพียงเครื่อง PC ที่มีทรัพยากรต่ำ
และ Bandwidth ต่ำ รองรับการ download ได้ไม่มาก
และไม่ได้ออกแบบให้ทำงานกับ Cache server : Static file แต่อย่างใด
ถ้ามี request เข้ามาสัก 20 – 30 คน พร้อม ๆ กัน
เครื่องนี้ก็คงจะรองรับการเชื่อมต่อไม่ไหวเป็นแน่ เพราะคอขวดเยอะครับ

บริการรับ-ส่งอีเมลของ Mercury/32 v.4.6 from localhost

mercury mail server on xampp that work with PHP
mercury mail server on xampp that work with PHP

การ config ให้เป็นบริการแบบสองทางคือ รับ กับ ส่ง
ผ่าน localhost บน winxp โดยใช้ Outlook Express

1. เปิดบริการ
เข้าโปรแกรม xampp control panel แล้วเปิดบริการ Mercury
จะพบว่า port 25 กับ 110 เปิดให้บริการแล้ว ตรวจด้วย netstat -na ใน DOS
2. สร้าง user ของ e-mail
เข้า admin ของ Mercury/32 v.4.6 ใน xampp control panel
แล้วเข้า Configuration, Manage Local User…
เพิ่มรหัสผู้ใช้อีเมล โดยกำหนดให้ User:test
Personal Name:test และ Mail Password:test
3. ทดสอบกับ e-mail client
เปิด Outlook Express ครั้งแรก ต้องกรอกข้อมูลต่าง ๆ
Display name: test และ E-mail address: test@localhost
Incoming mail: 127.0.0.1 และ Outgoing mail: 127.0.0.1
Account name: test และ Password:test
4. ทดสอบระบบรับ-ส่ง
สั่งเขียนอีเมลใน Outlook Express ให้กด Create Mail
ส่งถึง test@localhost และให้ subject กับ message เป็น “hello world”
เมื่อสั่ง Send/Recv ก็จะพบอีเมลใหม่เข้ามาใน inbox
5. เขียน code ภาษา php
ให้โปรแกรมที่เขียนขึ้นมาทำงานบน Apache ที่จัดการโดย XAMPP
<?php
mail(“test@localhost”,”hello world”,”1\n2\n”,”From: admin@localhost\r\n”);
?>
สร้างแฟ้ม x.php วางใน c:\xampp\htdocs แล้วเปิดเว็บ http://localhost/x.php
พบว่าระบบไม่ส่งอีเมลออกไป ต้องทำข้อที่เหลือก่อน โดยแก้ไข sendmail.ini และ php.ini
6. แก้ไข sendmail.ini
เปิด c:\xampp\sendmail\sendmail.ini ขึ้นมาแก้ไข
จาก smtp_server=mail.mydomain.com
เป็น smtp_server=localhost
7. แก้ไข php.ini
เปิด c:\xampp\php\php.ini ขึ้นมาแก้ไข
จาก ;sendmail_path = “\”c:\xampp\sendmail\sendmail.exe\” -t”
จาก sendmail_path = “c:\xampp\mailtodisk\mailtodisk.exe”
เป็น sendmail_path = “\”c:\xampp\sendmail\sendmail.exe\” -t”
เป็น ;sendmail_path = “c:\xampp\mailtodisk\mailtodisk.exe”
8. เมื่อ restart apache ก็จะส่งอีเมลได้แล้ว
สั่ง stop และ start apache ใหม่ แล้วเรียก x.php ผ่าน browser
ในการเรียกแต่ละครั้ง ก็จะส่งอีเมลจาก admin@localhost
แล้วพบอีเมลที่ส่งไปเข้า outlookexpress เรียบร้อยดี

ติดต่อ ADODB.Connection ผ่าน COM ไม่ได้

phpinfo com_dotnet in php.ini
phpinfo com_dotnet in php.ini

บรรลัดข้างล่างนี้ไม่ทำงาน หยุดเหมือน exit;
$conn = new COM(“ADODB.Connection”);
โปรแกรมทั้งระบบหยุดการทำงานไปเลย ติดต่อฐานข้อมูลไม่ได้ก็จบ
เหตุเกิดหลังติดตั้ง XAMPP
ซึ่งเดิมก็ใช้ Apache บน Win2008r2 อยู่แล้ว
ระบบส่วนใหญ่ใช้ mysql มีระบบหนึ่งยังใช้ access อยู่
… วันนี้มาเปิดจึงพบปัญหา

กว่าจะพบ แต่พบแล้วก็ร้อง อ๋อ ถึงบางอ้อจนได้
ไปพบว่าคำว่า
from PHP 5.4.5, COM and DOTNET is no longer built into the php core
ใน http://www.php.net/manual/en/com.installation.php

มาตรวจสอบ phpinfo ในเครื่องตัวเอง
พบว่ารุ่นของ PHP ที่ใช้คือ 5.5.9
และไม่พบ Section COM_DOTNET ใน phpinfo()

จึงเพิ่ม extension=php_com_dotnet.dll
เข้าไปใน php.ini แล้วก็ restart apache
ทำให้ code ทั้งหมดที่ติดต่อส่วนของฐานข้อมูล Access
กลับมาทำงานตามปกติ ดังเดิม

ระยะหลังมีหลายคำสั่งที่ php รุ่นใหม่ deprecated ออกไป
ถ้าจะใช้ก็ต้องเพิ่มค่า config com_dotnet  เอง
เป็นนโยบายตั้งแต่ php รุ่น 5.4.5
เล่าสู่กันฟังครับ .. หลังนั่งงมเข็มอยู่ตั้งนาน

เทียบรุ่นของ apache ใน appserv กับ xampp

apache httpd.conf
apache httpd.conf

เหตุเกิดจากข้อสงสัยเรื่อง appserv กับ xampp
ที่เกี่ยวกับบริการ download แฟ้ม .zip
ภายในเครือข่าย LAN ช้ามาก กับเร็วปรื้ด ๆ
แล้วก็พยายามลดข้อกำหนดของ Apache 2.0.52.0
ใน httpd.conf ให้เหลือ 11 บรรทัด
เพื่อบริการ download แฟ้ม .zip
แข่งกับ Apache 2.4.2.0 ใน ApacheFriends XAMPP 1.8.0
พบว่า apache รุ่นใหม่กว่า บริการได้เร็วกว่าหลายเท่า
ต่างกันระหว่าง 1 MB/s กับ 4 MB/s ใน LAN

download new version
download new version

#httpd.conf

ServerRoot “../”
PidFile c:/windows/httpd.pid
Listen 80
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
ServerName 192.168.1.100:80
DocumentRoot “../htdocs”
<Directory />
</Directory>
ErrorLog c:/windows/error.log

จากปัญหาความเร็วที่แตกต่าง
จึงทดสอบในหลายเครื่อง และหลายคู่
เทียบระหว่าง appserv กับ xampp
แต่มา clear ตอนล้าง config ของ apache
ทำให้เห็นชัดว่า น่าจะเป็นความต่างที่รุ่นของ apache

มีอีกคู่หนึ่งคือ Apache 2.2.25.0 กับ Apache 2.4.2.0 บน Xampp
พบว่า Apache แบบ MSI ช้ากว่า 1 ใน 3
คือได้ 200 KBps กับ 600 KBps

ใช้ xampp เป็น server แต่ลืมติดตั้ง service

xampp console
xampp console

มีเพื่อนเล่าว่า เครื่องบริการเว็บล้มบ่อยมาก แทบทุกสัปดาห์
โดยโปรแกรมที่ใช้เปิดบริการ คือ xampp
เพราะมี console application ที่ใช้สั่งงานได้ง่าย
มีอยู่วันหนึ่งล้มอีก ผมลองเข้าไปดู เมื่อ login เข้าระบบ
ก็พบ application ค่อย ๆ ตื่น และปิด service ทีละตัว
จึงรู้ว่า xampp ไม่ได้เปิด service ทิ้งไว้
ในแบบที่ server ทั่วไปทำกัน

Download โปรแกรมได้ที่ http://www.apachefriends.org/index.html

ผลการตรจสอบพบประเด็น ดังนี้
1. แก้ไขโดยเปิด service ของ apache กับ mysql
ก็คาดว่าครั้งต่อไป server ตัวนี้คงไม่ล้มเพราะเรื่อง service อีก
2. จะเปิด service พบว่า batch file สำหรับเปิดบริการหายไป
จึงไปหาจากเครื่องอื่นมาวางไว้
3. โดยคำสั่งพื้นฐานที่อยู่ใน batch file ที่ใช้เปิด service มีดังนี้
DOS> bin\httpd -k install
DOS> net start Apache2.4
DOS> bin\mysqld
–install mysql
–defaults-file=”%cd%\bin\my.ini”
DOS> net start MySQL

4. อันที่จริงมีรายละเอียดเกี่ยวกับการติดตั้ง service
ของ mysql ที่ต้อง set my.ini ให้เรียบร้อย
แนะนำว่าไปหา copy หรือ reinstall xampp ใหม่ดีกว่า
หากว่า .bat ทั้งหลายหายไป

ตัวอย่างการเชื่อม vs.net + console + winapp + mysql + xampp + mysql connector

vs.net + console + winapp + mysql + xampp + mysql connector
vs.net + console + winapp + mysql + xampp + mysql connector

ตัวอย่างมีโปรแกรม 2 ส่วน ที่แสดงความสัมพันธ์ของการทำงานกับส่วนต่าง ๆ ที่เชื่อมโยงกัน ได้แก่ vs.net + console application + class library + winapp + mysql + xampp + mysql connector ประกอบด้วย
1. solution ที่เป็น class library มี method ทำงานกับ mysql ในการ insert, delete, update, select
โดยรองรับการทำงานแบบ console และนำไปใช้งานบน windows forms application
http://www.thaiall.com/vsnet/mysql_sidu2.zip
2. solution ที่เป็น windows forms application มีฟอร์มเรียกใช้ class ใน class library เชื่อมต่อกับ mysql
http://www.thaiall.com/vsnet/mysql_form2.zip

ขั้นตอน และโปรแกรมที่จำเป็นต้องติดตั้งเพื่อใช้งาน solution ทั้ง 2 ข้างต้น

1. ติดตั้ง vs.net 2010
http://msdn.microsoft.com/en-us/library/dd831853%28v=vs.100%29.aspx
2. ติดตั้ง mysql connector .net เพื่อการเชื่อมต่อกับ mysql
http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-6.5.4.msi/from/http://cdn.mysql.com/
12.8 MB
3. ติดตั้ง xampp เพื่อบริการ mysql
http://www.apachefriends.org/download.php?xampp-win32-1.8.1-VC9-installer.exe
99 MB
4. คลาย .zip ทั้ง 2 solution ใน c:\ แบบ extract here
5. start mysql ใน xampp
6. เปิด c:\mysql_sidu2\mysql_sidu2.sln
7. เปลี่ยน application type เป็น console application
8. กด F5 = Start Debugging แล้ว กด s,1,10 คนละบรรทัดครับ เพื่อทดสอบ
9. เปิด c:\mysql_form2\mysql_form2.sln
10. กด F5 = Start Debugging เพื่อทดสอบ insert, delete, update, select