debian: บันทึก apache2

บนเดเบียน สามารถเปิดใช้งานมอดูลด้วยคำสั่ง a2enmod MODULENAME และปิดการใช้งานด้วยคำสั่ง a2dismod MODULENAME

มอดูล

autoindex
ดูไฟล์ในไดเรกทอรี่
userdir
public_html ของผู้ใช้
rewrite
การทำ rewrite คือแปลงรูปของ url แบบต่าง ๆ
proxy
การทำ Redirect ไปยังเครื่องอื่น (mod_proxy) - ตัวอย่างการติดตั้ง
cband
จำกัดแบนด์วิดธ์ ทำได้หลายอย่าง
ยกตัวอย่างแค่อย่างเดียว คือจำกัดการใช้งานต่อไอพีให้ความเร็วไม่เกิน 1000kbps คำร้องไม่เกิน 10 ครั้งต่อวินาที และเปิดการใช้งานได้ไม่เกิน 10 ครั้งต่อวินาที
# vi /etc/apache2/site-enables/example.com
<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName www.example.com
    ServerAlias example.com
    <IfModule mod_cband.c>
        CBandExceededSpeed 1000 10 10
    </IfModule>
    ...
</VirtualHost>

# /etc/init.d/apache2 force-reload

ภาษา

# vi /etc/apache2/conf.d/charset

ไทย
AddCharset    TIS-620    .tis-620 .th
AddCharset    CP874      .cp874

Windows 7 (นอกเรื่อง)

ติดตั้ง
How install Apache 2.4 PHP 5.4 and MySQL 5.5.21 on Windows 7
ยกเลิกพอร์ต 80 ของ Windows
Control Panel -> Program and Features -> Turn Windows features on or off
ปิด Internet Information Service
mod_wsgi
  • ไซต์ http://code.google.com/p/modwsgi/
  • คอมไพล์เองด้วยการใช้ Visual C++ รุ่นเดียวกับ Python เมื่อได้ไฟล์ mod_wsgi.so เอาไปใส่ใน c:\Apache2\modules
  • ปรับแต่ง httpd.conf ดังนี้
    ...
    LoadModule wsgi_module modules/mod_wsgi.so
    

    ที่มา: http://serverfault.com/questions/435926/cant-locate-api-module-structure-mod-wsgi

  • แก้ Firewall สำหรับพอร์ต 80
    http://superuser.com/questions/92488/apache-server-on-windows-7-opening-up-ports

    บันทึกการอัปเกรด apache2.2 และ php5 บน etch

    # aptitude update
    # aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-common
    # aptitude install php5 php5-cgi php5-commonphp5-curlphp5-gd php5-mcrypt php5-mysql php5-odbc php5-pgsql php5-xmlrpc
    # aptitude install libapache2-mod-php5

    ช่วงนี้ aptitude ของ etch เป็นอะไรไม่รู้ ชอบติดตั้งไฟล์ไม่ครบ
    (อาจเป็นที่ apt-proxy)
    แก้ไขแพกเกจติดตั้งไฟล์ไม่ครบ โดยการแตกไฟล์โดยไม่ติดตั้ง ไปยัง /
    # dpkg-deb -x /var/cache/apt/archives/apache2.2-common_2.2.3-3.1_i386.deb /

    # aptitude install mysql-client-5.0 mysql-common mysql-server-5.0 phpmyadmin

    บันทึกการเปิดโมดูลแบบน้อยสุด module-minimal
    # a2enmod actions
    # a2enmod alias
    # a2enmod authz_host
    # a2enmod cgi
    # a2enmod dir
    # a2enmod mime
    # a2enmod php5
    # a2enmod rewrite
    # a2enmod status
    # /etc/init.d/apache2 restart

    บันทึกการเปิดใช้โมดูลแบบปกติ module-normal
    # a2enmod alias
    # a2enmod auth_basic
    # a2enmod authn_file
    # a2enmod authz_default
    # a2enmod authz_groupfile
    # a2enmod authz_host
    # a2enmod authz_user
    # a2enmod autoindex
    # a2enmod cgi
    # a2enmod dir
    # a2enmod env
    # a2enmod mime
    # a2enmod mod_python
    # a2enmod negotiation
    # a2enmod php5
    # a2enmod setenv
    # a2enmod status
    # /etc/init.d/apache2 restart

    เอา php.ini จากตัวอย่างแบบ recommended มาใช้
    # cp /usr/share/doc/php5/examples/php.ini-recommended /etc/php5/apache2/php.ini

    แก้จะให้ใช้ได้กับ drupal
    # vi /etc/php5/apache2/php.ini

    ...
    ; หน่วยความจำที่ยอมให้สคริปต์รันได้
    ; เก่าเป็น 8M drupal แนะนำ 12M เราใช้ 16M กันเหนียว
    memory_limit = 16M ; Maximum amount of memory a script may consume (8MB)
    ...
    ; ตัวแปรเป็น global อัตโนมัติ
    ; อันนี้ก็กันเหนียว ตอนเขียนโค๊ดเรี่ยราดไว้หลายที่ เก่าเป็น Off เราแก้เป็น On
    register_globals = On
    ...
    ; ขนาดไฟล์ใหญ่สุด ที่ post ได้
    ; อันนี้จำได้แม่น หน้าแตกเพราะเอา Bon Echo เข้าไม่ได้ เก่าเป็น 8M แก้เป็น 20M
    post_max_size = 20M
    ...
    ; adodb ไม่ต้องก็ได้
    include_path = ".:/usr/share/php5:/usr/share/php4:/usr/share/php/adodb"
    ...
    ; ค่าแนะนำของ drupal
    session.save_handler = user
    ...
    ; ค่าแนะนำของ drupal
    session.cache_limiter = none
    ...

    ส่วนของไซต์ ถ้ามีหลายไซท์ ควรแยกไฟล์ออกมาวางไว้ที่ /etc/apache2/site-available
    เวลาจะเปิดใช้งานก็ใช้คำสั่ง a2ensite
    เช่นไซต์ example.com
    # vi /etc/apache2/sites-available/example.com

    <VirtualHost *:80>
      ServerAdmin webmaster@example.com
      ServerName www.example.com
    
      DocumentRoot /var/www/www.example.com/
      <Directory />
        Options FollowSymLinks
        AllowOverride All
      </Directory>
      <Directory /swww2/var/www/www.thaitux.info/>
        Options Indexes FollowSymLinks MultiViews
        DirectoryIndex index.html index.php
        AllowOverride All
        Order allow,deny
        allow from all
      </Directory>
    
      ErrorLog /var/log/apache2/error.log
    
      LogLevel warn
    
      CustomLog /var/log/apache2/access.log combined
      ServerSignature On
    </VirtualHost>

    เปิดใช้งานด้วยคำสั่ง
    # a2ensite example.com
    # /etc/init.d/apache2 restart

    apache2-ssl

    !!!BETA!!!
    เอามาจาก

    Debian Wiki - SubversionApache2SSLHowto
    Bug#395823: apache2-ssl-certificate disappeared

    ติดตั้ง apache2 กับ ssl
    # aptitude install apache2 openssl

    เปิดใช้โมดูล ssl
    # a2enmod ssl

    แก้ให้ apache2 ใช้พอร์ต https คือ 443
    # vi /etc/apache2/ports.conf

    ...
    Listen 443

    etch รุ่นล่าสุด ชุดคำสั่งสร้างกุญแจของ apache2 ชื่อ apache2-ssl-certificate หายไปแล้ว
    ต้องสั่งเองทีละขั้น
    # export RANDFILE=/dev/random
    # mkdir -p /etc/apache2/ssl
    # openssl req $@ -new -x509 -days 365 -nodes -out \
    /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

    กรอกข้อมูลตามปกติ
    ...
    Country Name (2 letter code) [AU]: <<<--- TH
    State or Province Name (full name) [Some-State]: <<<--- Bangkok
    Locality Name (eg, city) []: <<<--- Bangkok
    Organization Name (eg, company) [Internet Widgits Pty Ltd]: <<<--- Example Co.,Ltd.
    Organizational Unit Name (eg, section) []: <<<--- computer
    Common Name (eg, YOUR name) []: <<<--- webmaster
    Email Address []: <<<--- webmaster@example.com

    ป้องกันกุญแจ
    # chmod 600 /etc/apache2/ssl/apache.pem

    สร้างไฟล์ไซต์ ssl สมมุติชื่อไฟล์ว่า example-ssl โดยเอาโครงมาจากไฟล์ default
    # cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example-ssl

    ปรับแก้
    # vi /etc/apache2/sites-available/example-ssl

    NameVirtualHost *:443
    <VirtualHost *:443>
    
    ...
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        SSLProtocol all
        SSLCipherSuite HIGH:MEDIUM
    
    </VirtualHost>

    (ตรงนี้ สามารถเปลี่ยนไดเรกทอรี่ของ ssl ไปยังจุดใดก็ได้ ตามที่เราต้องการ
    เช่น ถ้าใช้ svn ไดเรกทอรี่จะเป็น /var/lib/svn/)

    สั่งเปิดใช้ไซต์ที่สร้างขึ้น
    # a2ensite example-ssl

    สั่งเริ่ม apache2 ใหม่
    # /etc/init.d/apache2 restart

    debian: การติดตั้งให้เรียกใช้งานเว็บเซิร์ฟเวอร์ภายในจากภายนอก

    debian: lenny/etch
    package: apache2.2 (2.2.9-10+lenny1/2.2.3-4+etch6)

    สมมุติว่าเซิร์ฟเวอร์ภายนอก ชื่อ www.example.com มีการติดตั้ง apache2 ไว้แล้ว
    และเซิร์ฟเวอร์ภายใน ชื่อ internal.example.com มีการติดตั้ง apache2 ไว้แล้ว

    ทำที่เครื่องเซิร์ฟเวอร์ภายนอกอย่างเดียว โดยใช้มอดูล proxy_http
    # a2enmod proxy
    # a2enmod proxy_http
    # /etc/init.d/apache2 restart

    ติดตั้งชื่อไฟล์ไซต์ใน sites-available ว่า internal
    # vi /etc/apache2/sites-available/internal

    <VirtualHost *:80>
        ServerAdmin webmaster@internal.example.com
        ServerName internal.example.com
        ProxyRequests Off
    
        <Proxy *>
            Order Deny,Allow
            Allow from all
        </Proxy>
    
        ProxyPreserveHost On
        ProxyPass / http://internal.example.com/
        ProxyPassReverse / http://internal.example.com/
    </VirtualHost>

    เปิดใช้งาน
    # a2ensite internal
    # /etc/init.d/apache2 reload

    เสร็จแล้ว
    ถ้าเราตั้งค่า dns ของภายนอกไว้แล้ว สามารถเรียกจากภายนอกผ่าน internal.example.com