About The Author

Sharing Tutorials on Using Computers, Basic, Simple and Easy Tips on Using Internet, Tricks and Techniques That I've Learnt Thus Far.

Email subscription

Pages

Showing posts with label webservers. Show all posts
Showing posts with label webservers. Show all posts

9.20.2010

Microsoft Forefront TMG – Publish RD Web Access bằng RD Gateway (Phần 1)

Trong bài này chúng tôi sẽ giới thiệu cho các bạn cách publish Remote Desktop Web Access với Remote Desktop Gateway trên Microsoft Forefront TMG.
Trong loạt bài ngắn này chúng tôi sẽ giới thiệu cho các bạn cách publish Remote Desktop Web Access với Remote Desktop Gateway trên Microsoft Forefront TMG. Một phần của loạt bài này sẽ giới thiệu cho các bạn cấu hình của dịch vụ RD Web Access và RD Desktop Gateway. Trong phần hai chúng tôi sẽ giới thiệu cách publish RD Web Access bằng Forefront TMG.
Chúng ta hãy bắt đầu
Windows Server 2008 R2 có một số tính năng mới và một số tính năng vẫn tồn tại để truy cập các dịch vụ Terminal Services. Bắt đầu từ Windows Server 2008 R2, Microsoft đã hay đổi tên của các thành phần Terminal Server. Cho ví dụ, tính năng Terminal Server trong các phiên bản Windows Server trước được đổi tên thành Remote Desktop Session Host. Một trong những tính năng mới có trong Windows Server 2008 là Remote Desktop Gateway, đây là tính năng cho phép các máy khách Remote Desktop có thể thiết lập một kết nối RDP qua giao thức HTTPS bằng Remote Desktop Gateway, và làm việc như một RPC trên HTTPS proxy. Remote Desktop Gateway sẽ kết nối máy khách RDP bằng giao thức RDP với Remote Desktop Session Host bên trong. Đây là một tính năng tuyệt vời vì giao thức HTTPS (Universal Firewall Bypass Protocol) được cho phép rộng rãi và không bị khóa bởi tường lửa hoặc các thiết bị khác. Kết hợp với tính năng Remote Desktop Web Access, người dùng có thể kết nối với một website để truy cập đến các ứng dụng đã được publish. Để tăng độ bảo mật cho việc truy cập Remote Desktop, chúng ta có thể sử dụng Forefront TMG để publish Remote Desktop Web Access với Remote Desktop Gateway.
Bài viết này thừa nhận rằng tính năng Remote Desktop Session Host được cài đặt và cấu hình đúng, vì vậy chúng ta chỉ cần cài đặt và cấu hình các thành phần Remote Desktop Web Access và Remote Desktop Gateway.
Với các ví dụ trong bài này, chúng tôi sẽ sử dụng một môi trường lab như sau:
  1. Một máy khách Windows 7 Ultimate để truy cập máy khách Remote Desktop
  2. Một Forefront TMG Server cho Remote Desktop publishing và làm việc như Remote Desktop Gateway với tính năng Remote Desktop Web Access.
  3. Một Windows Server 2008 R2 đã cài đặt các dịch vụ Remote Desktop Session Host.

Hình 1: Cài đặt dịch vụ Remote Desktop role
Sau khi cài đặt tính năng Remote Desktop Web Access, bạn phải đăng nhập vào cấu hình Remote Desktop Web Access để thay đổi một số thiết lập.

Hình 2: Đăng nhập vào website cấu hình Remote Desktop Web Access
Bạn phải cấu hình RD Web Access để cho phép người dùng truy cập đến các kết nối RemoteApp và Remote Desktop. Chọn một RD Connection Broker Server hoặc một Remote App Server làm nguồn như những gì bạn thấy trong hình bên dưới. Chúng ta chọn RemoteApp để nhận các ứng dụng RD đã được publish từ Remote Desktop Session Host.

Hình 3: Chỉ định nguồn cho RD Web Access
Sau khi các thiết lập này được lưu, bạn sẽ thấy các chương trình RemoteApp trong RD Web access.

Hình 4: Các chương trình RemoteApp trong RD Web Access
Vì Forefront TMG làm việc như một SSL Bridging Gateway trong Secure Webserver publishing sắp tới, nên vấn đề quan trọng ở đây là cần thực thi một cơ sở hạ tầng chứng chỉ đúng. Bạn cần phải bảo đảm đúng các chứng chỉ được phát hành và tất cả các máy chủ có liên quan trong quá trình publish (Forefront TMG, RD Session Host Server và Windows 7 client) tin tưởng CA đang phát hành. Cho ví dụ trong loạt bài này, chúng ta sử dụng tên DNS webmail.trainer.de để truy cập dịch vụ RD Web Access và RD Gateway, vì vậy chúng ta cần phải phát hành một chứng chỉ ở nơi Common Name (CN) của chứng chỉ khớp với public URL sẽ được sử dụng để truy cập RD Web Access hoặc phải được nhập vào trong kết nối Remote Desktop client từ máy tính Windows 7 trên Internet. Hình dưới đây hiển thị chứng chỉ đúng được sử dụng bởi các dịch vụ RD Web Access và RD Gateway. Chứng chỉ này cũng phải được import khóa riêng trên Forefront TMG Server hành động như một thiết bị SSL Bridging. Chúng tôi sẽ giới thiệu cho các bạn cách thực hiện điều này trong phần hai.

Hình 5: Chứng chỉ SSL đúng cho RD WebAccess
Sau khi cài đặt thành phần dịch vụ RD Gateway, bạn phải chọn đúng chứng chỉ SSL cho dịch vụ RD Gateway như thể hiện trong hình bên dưới.

Hình 6: Chứng chỉ SSL đúng cho dịch vụ RD Gateway
Một phần cấu hình quan trọng khác là chỉ định các thiết lập SSL Bridging cho dịch vụ RD Gateway. Với môi trường lab, chúng ta sẽ sử dụng SSL Bridging dưới hình thức “HTTPS to HTTPS Bridging”

Hình 7: Chọn các tùy chọn SSL Bridging
Cấu hình của RD Web Access và các thành phần dịch vụ RD Gateway đã kết thúc. Trong phần hai của loạt bài này, chúng tôi sẽ giới thiệu cách cấu hình Webserver Publishing an toàn bằng Forefront TMG để publish RD Web Access lên Internet và giới thiệu cách kết nối trực tiếp đến dịch vụ RD Gateway với Remote Desktop client của máy tính Windows 7 trong lab.
Kết luận
Trong phần đầu tiên của loạt bài này, chúng tôi đã cung cấp cho các bạn tổng quan về việc cấu hình Remote Desktop Web Access và Remote Desktop Gateway Manager. Trong bài chúng tôi cũng giới thiệu được các bước cần thiết để chuẩn bị các tính năng này cho việc publish bằng Forefront TMG.

Quantrimang-Văn Linh (Theo Isaserver)

 

9.15.2010

Config WebDAV với Apache2 trên OpenSUSE 11.3

Trong bài viết sau đây, Quản Trị Mạng sẽ giới thiệu với các bạn cách cài đặt và thiết lập hệ thống WebDAV cùng với Apache2 trên nền tảng OpenSUSE 11.3 server. WebDAV là khái niệm viết tắt của Web-based Distributed Authoring and Versioning – bộ tổ hợp các công cụ hỗ trợ giao thức HTTP cho phép người sử dụng trực tiếp chỉnh sửa dữ liệu trên server Apache, qua đó không cần phải thao tác qua FTP. Đương nhiên WebDAV cũng có thể làm được việc upload và download dữ liệu.

Lưu ý sơ bộ

Tại hệ thống thử nghiệm này, chúng tôi sử dụng OpenSUSE 11.3 server và địa chỉ IP 192.168.0.100

Cài đặt WebDAV

Nếu hệ thống của bạn chưa được cài đặt Apache, hãy sử dụng lệnh sau:
yast2 -i apache2
Sau đó, kích hoạt các module của WebDAV:
a2enmod dav
a2enmod dav_fs
a2enmod dav_lock
Và tạo đường dẫn khởi động cho Apache, đồng thời khởi động luôn dịch vụ này:
chkconfig --add apache2

/etc/init.d/apache2 start
Tạo host ảo

Sau đây, chúng ta sẽ tạo 1 vhost Apache www.example1.com tại thư mục /srv/www/web1/web. Nếu hệ thống của bạn đã có vhost thì chỉ cần chỉnh lại các thông số cho phù hợp với bài thử nghiệm này.

Trước tiên, tạo thư mục /srv/www/web1/web, tạo tài khoản sử dụng Apache (wwwrun) và nhóm (www) để quản lý thư mục đó:
mkdir -p /srv/www/web1/web
chown wwwrun:www /srv/www/web1/web
Thiết lập vhost Apache cho www.example1.com:
vi /etc/apache2/vhosts.d/www.example1.com.conf


ServerAdmin webmaster@localhost
ServerName www.example1.com
ServerAlias example1.com

DocumentRoot /srv/www/web1/web/

Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all


Mở file cấu hình /etc/apache2/httpd.conf và thêm dòng NameVirtualHost * vào trước Include /etc/apache2/vhosts.d/*.conf:
vi /etc/apache2/httpd.conf

[...]
### Virtual server configuration ############################################
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
#
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
NameVirtualHost *

Include /etc/apache2/vhosts.d/*.conf
[...]
Khởi động lại Apache:
/etc/init.d/apache2 restart
Thiết lập host ảo đối với WebDAV

Tạo file mật khẩu WebDAV /srv/www/web1/passwd.dav dành cho tài khoản test (tham số -c sẽ chuyển sang bước tạo file nếu file đó chưa có sẵn):
htpasswd2 -c /srv/www/web1/passwd.dav test
Hệ thống sẽ yêu cầu bạn khai báo mật khẩu cho tài khoản test (lưu ý rằng không nên sử dụng -c nếu file /srv/www/web1/passwd.dav đã tồn tại, vì bạn sẽ mất hết dữ liệu thiết lập cho tài khoản trước đó). Thay đổi quyền truy cập tới file /srv/www/web1/passwd.dav thành chỉ có tài khoản root và thành viên của nhóm www mới được phép truy cập và thao tác:
chown root:www /srv/www/web1/passwd.dav
chmod 640 /srv/www/web1/passwd.dav
Chỉnh lại vhost www.example1.com trong file /etc/apache2/vhosts.d/www.example1.com.conf và thêm dòng lệnh sau vào:
vi /etc/apache2/vhosts.d/www.example1.com.conf

[...]
Alias /webdav /srv/www/web1/web


DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /srv/www/web1/passwd.dav
Require valid-user

[...]
Khi người sử dụng tiến hành gọi /webdav thì Alias (cùng với ) sẽ trực tiếp thực hiện điều đó, nhưng bạn vẫn có thể truy cập toàn bộ thư mục gốc của vhost, toàn bộ các đường dẫn URL khác vẫn thuộc dạng “normal”. Vhost sau khi chỉnh sửa sẽ trông giống như sau:

ServerAdmin webmaster@localhost
ServerName www.example1.com
ServerAlias example1.com

DocumentRoot /srv/www/web1/web/

Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all


Alias /webdav /srv/www/web1/web


DAV On
AuthType Basic
AuthName "webdav"
AuthUserFile /srv/www/web1/passwd.dav
Require valid-user

Chúng ta cần chỉ định chính xác vị trí của WebDAV để hạn chế việc truy cập tùy tiện vào cơ sở dữ liệu. Tại đây chúng ta sẽ áp dụng vào thư mục /var/lib/dav/, do đó tạo thư mục đó bằng lệnh sau:
mkdir /var/lib/dav/
chown wwwrun:www /var/lib/dav/
Mở file cấu hình /etc/apache2/httpd.conf và thêm DAVLockDB vào trước dòng NameVirtualHost *:
vi /etc/apache2/httpd.conf

[...]
### Virtual server configuration ############################################
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
#
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#

# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb

NameVirtualHost *

Include /etc/apache2/vhosts.d/*.conf
[...]
Sau đó khởi động lại Apache:
/etc/init.d/apache2 restart
Kiểm tra WebDAV

Để thực hiện bước này, chúng ta cần cài đặt cadaver – ứng dụng WebDAV client với giao diện dòng lệnh:
yast2 -i cadaver
Và kiểm tra lại WebDAV với lệnh sau:
cadaver http://www.example1.com/webdav/
Hệ thống sẽ yêu cầu người sử dụng khai báo tài khoản đăng nhập, ở đây chúng ta điền tên là test và mật khẩu tạo ra ở bước trên. Khi tài khoản đó được gán quyền truy cập nghĩa là quá trình thiết lập của chúng ta đã thành công. Gõ lệnh quit để thoát khỏi WebDAV:
server1:~ # cadaver http://www.example1.com/webdav/
Authentication required for webdav on server `www.example1.com':
Username: test
Password:
dav:/webdav/> quit
Connection to `www.example1.com' closed.
Server1:~ #
Trên đây là 1 số thao tác cơ bản để cài đặt và thiết lập WebDAV với Apache2 trên OpenSUSE 11.3. Chúc các bạn thành công!
T.Anh (theo HowToForge)

9.14.2010

Cài Apache2 với PHP5 và MySQL hỗ trợ trên Mandriva 2010.1 Spring (LAMP)

Trong bài hướng dẫn sau, Quản Trị Mạng sẽ  giới thiệu với các bạn cách cài đặt webserver Apache2 trên hệ thống  server Mandriva 2010.1 Spring với PHP5 (module mod_php) và MySQL hỗ trợ. Thuật ngữ LAMP ở đây là dạng viết tắt của tổ hợp Linux, Apache, MySQL, PHP.





Lưu ý sơ bộ




Trong hệ thống thử nghiệm này, chúng ta sử dụng hostname server1.example.com với địa chỉ IP: 192.168.0.100. Hãy thay thế các thông số này cho tương ứng và phù hợp với hệ thống của bạn.



Cài đặt MySQL 5



Trước tiên, chúng ta cần cập nhật cơ sở dữ liệu của các gói cài đặt:


urpmi.update -a

Cài đặt MySQL bằng lệnh sau:


urpmi MySQL MySQL-client

Ở chế độ mặc định, tính năng hỗ trợ mạng không được kích hoạt trong  gói Mandriva 2010.1 Spring MySQL. Chúng ta hoàn toàn có thể thay đổi  được điều này bằng cách chú thích tại dòng lệnh skip-networking trong file /etc/my.cnf:


vi /etc/my.cnf



[...]

# Don't listen on a TCP/IP port at all. This can be a security enhancement,

# if all processes that need to connect to mysqld run on the same host.

# All interaction with mysqld must be made via Unix sockets or named pipes.

# Note that using this option without enabling named pipes on Windows

# (via the "enable-named-pipe" option) will render mysqld useless!

#

#skip-networking

[...]


Sau đó, khởi động MySQL:


/etc/init.d/mysqld start

Kiểm tra lại xem tính năng hỗ trợ mạng đã được kích hoạt chưa bằng lệnh:


netstat -tap | grep mysql

Kết quả trả về của hệ thống sẽ trông giống như sau:


[root@server1 ~]# netstat -tap | grep mysql

tcp 0 0 *:mysql *:* LISTEN 2459/mysqld

[root@server1 ~]#


Tiếp theo, sử dụng lệnh:


mysql_secure_installation

để đặt mật khẩu cho tài khoản root (nếu không bất cứ ai cũng có thể truy cập vào cơ sở dữ liệu MySQL):


[root@server1 ~]# mysql_secure_installation









NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!





In order to log into MySQL to secure it, we'll need the current

password for the root user. If you've just installed MySQL, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.



Enter current password for root (enter for none): <-- nhấn ENTER

OK, successfully used password, moving on...



Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.



Set root password? [Y/n] <-- nhấn ENTER

New password: <-- mật khẩu SQL root

Re-enter new password: <-- mật khẩu SQL root

Password updated successfully!

Reloading privilege tables..

... Success!





By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.



Remove anonymous users? [Y/n] <-- nhấn ENTER

... Success!



Normally, root should only be allowed to connect from 'localhost'. This

ensures that someone cannot guess at the root password from the network.



Disallow root login remotely? [Y/n] <-- nhấn ENTER

... Success!



By default, MySQL comes with a database named 'test' that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.



Remove test database and access to it? [Y/n] <-- nhấn ENTER

- Dropping test database...

... Success!

- Removing privileges on test database...

... Success!



Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.



Reload privilege tables now? [Y/n] <-- nhấn ENTER

... Success!



Cleaning up...







All done! If you've completed all of the above steps, your MySQL

installation should now be secure.



Thanks for using MySQL!





[root@server1 ~]#


Cài đặt Apache2



Apache2 đã có sẵn trong gói cài đặt của Mandriva, do vậy hãy sử dụng lệnh sau:


urpmi apache-mpm-worker

Và khởi động Apache:


/etc/init.d/httpd start

Bây giờ, mở trình duyệt và gõ địa chỉ http://192.168.0.100, nếu thành công thì bạn sẽ thấy trình duyệt hiển thị như sau:


Thư mục tài liệu mặc định của Apache là /var/www/html trên Mandriva,  còn file cấu hình thì được lưu trữ tại /etc/httpd/conf/httpd.conf. Các  file thiết lập khác được lưu tại thư mục /etc/httpd/conf.d/

Cài đặt PHP5



Sử dụng lệnh sau để cài đặt PHP5 và các module hỗ trợ Apache PHP5:


urpmi apache-mod_php

Kiểm tra PHP5 và thu thập thông tin về quá trình cài đặt:



Thư mục root mặc định của các website là /var/www/html. Tại đây chúng ta  sẽ tạo 1 file PHP nhỏ (info.php) trong thư mục đó và gọi ra trong trình  duyệt. File này sẽ hiển thị đầy đủ thông tin chi tiết về quá trình cài  đặt PHP.


vi /var/www/html/info.php



<?php

phpinfo();

?>


Gõ địa chỉ sau vào trình duyệt: http://192.168.0.100/info.php:


Như kết quả hiển thị trong hình, bạn có thể thấy rằng PHP5 đã hoạt  động thông qua Apache 2.0 Handler – được chỉ ra tại dòng Server API. Khi  kéo xuống phía dưới danh sách, bạn sẽ thấy tất cả các module đã được  kích hoạt trong PHP5. Riêng MySQL thì không có nghĩa là MySQL không được  hỗ trợ bên trong PHP5.



Cài đặt MySQL hỗ trợ trong PHP5



Để làm việc này, chúng ta cần cài thêm gói php-mysql hỗ trợ. Bên cạnh  đó, chúng ta có thể tìm và cài thêm 1 số module hỗ trợ PHP5 trong danh  sách liệt kê sau:


urpmf php

Chọn những gói phù hợp với nhu cầu sử dụng và cài đặt chúng theo cách sau:


urpmi php-mysql php-mysqli php-bz2 php-calendar php-ctype  php-curl php-devel php-dio php-dom php-eaccelerator php-enchant  php-esmtp php-event php-exif php-fam php-ffmpeg php-fileinfo php-filepro  php-ftp php-gd php-gettext php-gmp php-iconv php-id3 php-imap  php-mailparse php-mbstring php-mcache php-mcrypt php-ming php-newt  php-odbc php-oggvorbis php-pcntl php-pcre php-pear-Net_IDNA php-posix  php-pspell php-readline php-recode php-session php-shmop php-simplexml  php-snmp php-soap php-sockets php-sqlite php-ssh2 php-suhosin  php-sysvmsg php-sysvsem php-sysvshm php-tclink php-tcpwrap php-tidy  php-xml php-xmlrpc php-zip php-ini

Sau đó khởi động lại Apache2:


/etc/init.d/httpd restart

và sử dụng trình duyệt để kiểm tra lại module MySQL đã hoạt động hay chưa:


Cài đặt phpMyAdmin



Với phpMyAdmin người sử dụng sẽ dễ dàng hơn trong việc quản lý cơ sở dữ liệu MySQL. Các bạn tiến hành cài đặt phpMyAdmin như sau:


urpmi phpmyadmin

Sau đó mở file cấu hình /etc/httpd/conf/webapps.d/phpmyadmin.conf…:


vi /etc/httpd/conf/webapps.d/phpmyadmin.conf

và chỉnh lại để giống như sau để cho phép các truy cập khác kết nối vào phpMyAdmin:


Alias /phpmyadmin /var/www/phpmyadmin



<Directory /var/www/phpmyadmin>

Order deny,allow

#Deny from all

#Allow from 127.0.0.1

Allow from all

ErrorDocument 403 "Access denied per /etc/httpd/conf/webapps.d/phpmyadmin.conf"



php_flag session.auto_start 0

</Directory>



<Directory /var/www/phpmyadmin/libraries>

Order deny,allow

Deny from all

</Directory>


Sau đó khởi động lại Apache:


/etc/init.d/httpd restart

và truy cập vào phpMyAdmin qua đường dẫn http://192.168.0.100/phpmyadmin/:


Trên đây là 1 số bước cơ bản để cài đặt Apache2 với PHP5 và MySQL hỗ  trợ trong nền tảng Mandriva 2010.1 Spring. Chúc các bạn thành công!

T.Anh (theo HowToForge)

Cài đặt Apache2 với mod_fcgid và PHP5 trên Ubuntu 10.04

Trong bài viết sau, Quản Trị Mạng sẽ giới thiệu với các bạn cách cài đặt Apache2 với module hỗ trợ mod_fcgid và PHP5 trên nền tảng Ubuntu 10.04. Module này là 1 sự thay thế khá hoàn hảo cho module cũ – mod_fastcgi. Nó cho phép bạn thực hiện các đoạn mã PHP với tài khoản tương ứng của Apache.



Lưu ý sơ bộ



Tại bài thử nghiệm này chúng ta sử dụng hệ điều hành Ubuntu server với hostname server1.example.com và địa chỉ IP 192.168.0.100. Tại đây, ta tạo 2 vhost Apache, bao gồm www.example1.comwww.example2.com để mô phỏng mục đích sử dụng của mod_fcgid. Hãy đăng nhập vào hệ thống bằng tài khoản root:

sudo su

/bin/sh là đường dẫn liên kết đến /bin/dash, nhưng chúng ta chỉ cần đến /bin/bash chứ không phải là /bin/dash. Do vậy hãy gõ lệnh sau:

dpkg-reconfigure dash



Install dash as /bin/sh? <-- gõ No

Tiếp đó, chúng ta cần tắt bỏ AppArmor:

/etc/init.d/apparmor stop

update-rc.d -f apparmor remove

aptitude remove apparmor apparmor-utils

Cài đặt Apache2 / mod_fcgi / PHP5



Để cài đặt đầy đủ 3 ứng dụng trên theo thứ tự, sử dụng lệnh sau:

aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

Nhưng nếu Apache2 đã được cài đặt cùng với PHP5 như 1 module của Apache thì cần phải tắt bỏ module PHP5 đó đi:

a2dismod php5

và kích hoạt những module sau:

a2enmod rewrite

a2enmod suexec

a2enmod include

a2enmod fcgid

Sau đó mở file /etc/php5/cgi/php.ini:

vi /etc/php5/cgi/php.ini

bỏ chú thích tại dòng cgi.fix_pathinfo = 1:

[...]

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's

; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok

; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting

; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting

; of zero causes PHP to behave as before. Default is 1. You should fix your scripts

; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.

; http://php.net/cgi.fix-pathinfo

cgi.fix_pathinfo=1

[...]

Tiếp tục mở file /etc/apache2/mods-available/fcgid.conf … :

vi /etc/apache2/mods-available/fcgid.conf

và thêm dòng mã PHP_Fix_Pathinfo_Enable 1 (không giống như các phiên bản Ubuntu trước kia, với bản 10.04 dòng mã này không được nằm trong section của <VirtualHost> nếu không sẽ gây ra lỗi PHP_Fix_Pathinfo_Enable cannot occur within <VirtualHost> section):

<IfModule mod_fcgid.c>

AddHandler fcgid-script .fcgi

FcgidConnectTimeout 20

PHP_Fix_Pathinfo_Enable 1

</IfModule>

Và khởi động lại Apache:

/etc/init.d/apache2 restart

Tạo Vhosts cho www.example1.com và www.example2.com



Trong bước tiếp theo, chúng ta sẽ tạo 2 vhost - www.example1.com (với thư mục tài liệu gốc là /var/www/web1/web) và www.example2.com (thư mục tài liệu gốc là /var/www/web2/web). Trong đó, www.example1.com thuộc sở hữu của tài khoản người dùng và nhóm web1, còn www.example2.com thuộc sở hữu của tài khoản người dùng và nhóm web2. Trước tiên, chúng ta tạo tài khoản người sử dụng và các nhóm tương ứng:

groupadd web1

groupadd web2

useradd -s /bin/false -d /var/www/web1 -m -g web1 web1

useradd -s /bin/false -d /var/www/web2 -m -g web2 web2

Tiếp theo, tạo các thư mục tài liệu gốc tương ứng với các vhost và nhóm đó:

mkdir -p /var/www/web1/web

chown web1:web1 /var/www/web1/web

mkdir -p /var/www/web2/web

chown web2:web2 /var/www/web2/web

Chúng ta sẽ sử dụng PHP với suExec, và thư mục tài liệu gốc của suExec tại /var/www, như được chỉ ra bằng lệnh sau:

/usr/lib/apache2/suexec -V



root@server1:~# /usr/lib/apache2/suexec -V

-D AP_DOC_ROOT="/var/www"

-D AP_GID_MIN=100

-D AP_HTTPD_USER="www-data"

-D AP_LOG_EXEC="/var/log/apache2/suexec.log"

-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"

-D AP_UID_MIN=100

-D AP_USERDIR_SUFFIX="public_html"

root@server1:~#

Nhưng chúng ta lại không thể gọi trực tiếp các file PHP nhị phân (/usr/lib/cgi-bin/php) trực tiếp bởi vì ó được đặt bên ngoài thư mục gốc của suExec. Nhưng suExec lại không chấp nhận các đường dẫn liên kết mềm, do đó cách giải quyết duy nhất để khắc phục vấn đề này là tạo mã kích hoạt hỗ trợ cho từng website riêng biệt trong thư mục con của /var/www; và những đoạn mã này sẽ đảm nhận nhiệm vụ gọi các thư viện của PHP tại /usr/lib/cgi-bin/php. Và những đoạn mã này phải thuộc quyền quản lý của các tài khoản người dùng và nhóm riêng biệt trong từng website. Tại đây, chúng ta sẽ tạo những đoạn mã tương ứng bên trong thư mục /var/www/php-fcgi-scripts, ví dụ là /var/www/php-fcgi-scripts/web1 và /var/www/php-fcgi-scripts/web2:

mkdir -p /var/www/php-fcgi-scripts/web1

mkdir -p /var/www/php-fcgi-scripts/web2



vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter



#!/bin/sh

PHPRC=/etc/php5/cgi/

export PHPRC

export PHP_FCGI_MAX_REQUESTS=5000

export PHP_FCGI_CHILDREN=8

exec /usr/lib/cgi-bin/php



vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter



#!/bin/sh

PHPRC=/etc/php5/cgi/

export PHPRC

export PHP_FCGI_MAX_REQUESTS=5000

export PHP_FCGI_CHILDREN=8

exec /usr/lib/cgi-bin/php

Thông tin tại dòng PHPRC sẽ chỉ tới thư mục của file php.ini (ví dụ /etc/php5/cgi/ thành /etc/php5/cgi/php.ini). PHP_FCGI_MAX_REQUESTS là số lượng các yêu cầu tối đa được fcgid xử lý trước khi dừng lại và quá trình mới bắt đầu. PHP_FCGI_CHILDREN khởi tạo số lượng các “PHP children” sẽ được kích hoạt.



Đoạn mã php-fcgi-starter phải được thực thi:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter

chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter

chown -R web1:web1 /var/www/php-fcgi-scripts/web1

chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Bây giờ, chúng ta sẽ tạo vhost Apache dành cho www.example1.com và www.example2.com:

vi /etc/apache2/sites-available/web1



<VirtualHost *:80>

ServerName www.example1.com

ServerAlias example1.com

ServerAdmin webmaster@example1.com

DocumentRoot /var/www/web1/web/



<IfModule mod_fcgid.c>

SuexecUserGroup web1 web1

<Directory /var/www/web1/web/>

Options +ExecCGI

AllowOverride All

AddHandler fcgid-script .php

FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php

Order allow,deny

Allow from all

</Directory>

</IfModule>



# ErrorLog /var/log/apache2/error.log

# CustomLog /var/log/apache2/access.log combined

ServerSignature Off



</VirtualHost>

a2ensite web1



vi /etc/apache2/sites-available/web2



<VirtualHost *:80>

ServerName www.example2.com

ServerAlias example2.com

ServerAdmin webmaster@example2.com

DocumentRoot /var/www/web2/web/



<IfModule mod_fcgid.c>

SuexecUserGroup web2 web2

<Directory /var/www/web2/web/>

Options +ExecCGI

AllowOverride All

AddHandler fcgid-script .php

FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php

Order allow,deny

Allow from all

</Directory>

</IfModule>



# ErrorLog /var/log/apache2/error.log

# CustomLog /var/log/apache2/access.log combined

ServerSignature Off



</VirtualHost>

a2ensite web2

Hãy chắc chắn rằng bạn đã khai báo đường dẫn chính xác, bao gồm cả tên các tài khoản người dùng và nhóm tại dòng SuexecUserGroup. Reload Apache với lệnh sau:

/etc/init.d/apache2 reload

Kiểm tra



Để tiến hành kiểm tra, chúng ta sẽ tạo 1 file PHP nho nhỏ. Ví dụ với www.example1.com:

vi /var/www/web1/web/info.php



<?php

phpinfo();

?>

Sau đó, mở trình duyệt và gõ địa chỉ sau: http://www.example1.com/info.php. Nếu tất cả hoạt động bình thường, kết quả hiển thị sẽ giống như hình dưới đây, và bạn sẽ nhìn thấy thông số CGI/FastCGI tại dòng Server API:

Tùy chỉnh file php.ini cho từng website



Như đã đề cập bên trên, mỗi website riêng biệt đều có mã kích hoạt php-fcgi-starter tương ứng, vì vậy chúng ta không thể tạo riêng file php.ini cho từng website được. Để mô tả quá trình này, chúng ta sẽ copy file php.ini mặc định (/etc/php5/cgi/php.ini) tới thư mục /var/www/web2/ và “ép” www.example2.com sử dụng php.ini từ thư mục /var/www/web2/:

cp /etc/php5/cgi/php.ini /var/www/web2/

chown web2:web2 /var/www/web2/php.ini

Tại đây, bạn có thể chỉnh lại file /var/www/web2/php.ini theo ý thích. Sau đó chúng ta tiếp tục mở file /var/www/php-fcgi-scripts/web2/php-fcgi-starter … :

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

và thêm giá trị /var/www/web2/ vào dòng PHPRC:

#!/bin/sh

PHPRC=/var/www/web2/

export PHPRC

export PHP_FCGI_MAX_REQUESTS=5000

export PHP_FCGI_CHILDREN=8

exec /usr/lib/cgi-bin/php

Và tải lại Apache:

/etc/init.d/apache2 reload

Tiếp theo, tạo file phpinfo(); cho www.example2.com … :

vi /var/www/web2/web/info.php



<?php

phpinfo();

?>

Và kiểm tra bằng đường dẫn http://www.example2.com/info.php. Tại dòng Loaded Configuration File sẽ hiển thị thông tin /var/www/web2/php.ini:

Thay đổi thiết lập của file cấu hình PHP



Trong quá trình luân chuyển file php.ini mới tới website, bạn vẫn có thể thay đổi lại những thiết lập của mã php-fcgi-starter (hoặc sử dụng song song cả 2) bằng cách thêm tiền tố -d để chuyển thành file PHP thực thi. Ví dụ, nếu muốn tắt bỏ module magic_quotes_gpc của website www.example2.com thì chúng ta sẽ làm như sau:

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter



#!/bin/sh

PHPRC=/etc/php5/cgi/

export PHPRC

export PHP_FCGI_MAX_REQUESTS=5000

export PHP_FCGI_CHILDREN=8

exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off

Tiếp tục tải lại Apache:

/etc/init.d/apache2 reload

Mở trình duyệt, kiểm tra lại mã info.php bằng địa chỉ http://www.example2.com/info.php, tìm kiếm thông tin của magic_quotes_gpc – hệ thống sẽ hiển thị tình trạng Off:

Trên đây là 1 số thao tác để cài đặt Apache2 cùng module mod_fcgid và PHP5 trên nền tảng Ubuntu 10.04. Chúc các bạn thành công!

T.Anh (theo HowToForge)