1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Sử dụng CGI Script với Nginx trên OpenSUSE 11.4 pptx

15 287 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử dụng CGI script với Nginx trên OpenSUSE 11.4
Thể loại Presentation
Định dạng
Số trang 15
Dung lượng 355,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sử dụng CGI Script với Nginx trên OpenSUSE 11.4 Cách đây vài ngày chúng tôi đã giới thiệu tới các bạn lợi ích của chuẩn kết nối CGI và cách sử dụng CGI Script với Nginx trên Fedora 15..

Trang 1

Sử dụng CGI Script với Nginx trên

OpenSUSE 11.4 Cách đây vài ngày chúng tôi đã giới thiệu tới các bạn lợi ích của chuẩn kết nối CGI và cách sử dụng CGI Script với Nginx trên Fedora 15 Tuy nhiên

ngày nay, OpenSUSE (hệ điều hành chiến lược của Novell) hiện được sử dụng khá phổ biến ở Châu Âu và ngày càng chiếm được số lượng người dùng yêu thích linux cũng như mới bắt đầu làm quyen với linux do sự dễ cài đặt, dễ sử dụng và giao diện thân thiện của hệ điều hành Vì vậy nhu cầu sử dụng CGI scripts (Perl scripts) là rất lớn

Cũng như trên Fedora, CGI không đáp ứng cho OpenSUSE theo mặc định Để khắc phục thiếu sót này chúng ta cần truy vấn proxy cho các script CGI tới Thttpd (một máy chủ nhỏ hỗ trợ CGI), tiếp theo sử dụng một CGI wrapper để đáp ứng CGI script Sau đây là các bước tiến hành trên phiên bản OpenSUSE 11.4

Lưu ý chung

Ở đây chúng tôi sử dụng website www.example.com với thư mục root là

/srv/www/www.example.com/web/; cấu hình vhost nằm trong tập tin cấu hình

chính của nginx /etc/nginx/nginx.conf

Sử dụng Thttpd

Đầu tiên chúng tôi sẽ mô tả cách cấu hình nginx để truy vấn proxy cho CGI script

(có phần mở rộng cgi hoặc pl) tới Thttpd Và cấu hình Thttpd chạy trên cổng

8000

Hãy bắt đầu bằng việc cài đặt Thttpd Là một gói cho OpenSUSE, nhưng

ThttpdCGI cần được vá, do đó chúng ta tải về gói src.rpm cho OpenSUSE 11.4, vá

nó và xây dựng một gói rpm mới

Đầu tiên cần kích hoạt kho lưu trữ của openSUSE-11.4-Source bằng lệnh:

Trang 2

yast

Vào Software > chọn Software Repositories:

Kích hoạt kho openSUSE-11.4-Source và thoát khỏi YaST:

Trang 3

Chúng ta cần cài đặt các công cụ cần thiết để xây dựng một gói rpm mới:

zypper install patch automake glibc-devel gcc flex

compat-readline4 db-devel wget gcc-c++ make vim libtool

Tiếp theo tải về gói src.rpm của Thttpd cho OpenSUSE 11.4:

cd /usr/src

zypper source-install thttpd

Bây giờ là lúc tải bản vá cho thư mục /usr/src/packages/SOURCES/ và chỉnh sửa tập tin /usr/src/packages/SPECS/thttpd.spec cho phù hợp:

cd /usr/src/packages/SOURCES

wget -O thttpd-2.25b-ipreal.patch

http://www.danielclemente.com/amarok/ip_real.txt

Mở /usr/src/packages/SOURCES/thttpd-2.25b-ipreal.patch

vi /usr/src/packages/SOURCES/thttpd-2.25b-ipreal.patch

Trang 4

… và chỉnh sửa hai dòng đầu tiên của phiên bản gốc:

- thttpd-2.25b/libhttpd.c 2003-12-25

20:06:05.000000000 +0100

+++ thttpd-2.25b-patched/libhttpd.c 2005-01-09 00:26:04.867255248 +0100

[ ]

Loại bỏ phần được đánh dấu để trở thành như sau:

- libhttpd.c 2003-12-25 20:06:05.000000000 +0100

+++ libhttpd.c 2005-01-09 00:26:04.867255248 +0100

[ ]

Tiếp theo vào đường dẫn /usr/src/packages/SPECS/ và sửa lại thttpd.spec:

cd /usr/src/packages/SPECS/

vi thttpd.spec

Thêm vào đó dòng Patch13: thttpd-2.25b-ipreal.patch và

%patch13:

[ ]

Patch0: %{name}-%{version}-configure.patch

Patch1: %{name}-%{version}-dirs.patch

Patch2: %{name}-%{version}-time_h.patch

Patch3: %{name}-%{version}-newautoconf.patch

Patch4: %{name}-%{version}-sec.patch

Patch5: %{name}-%{version}-static.patch

Patch6: %{name}-%{version}-pie.patch

Patch7: %{name}-%{version}-syslogtocern.diff

Trang 5

Patch8: %{name}-%{version}-overflow.diff

Patch9: %{name}-%{version}-chown.diff

Patch10: %{name}-%{version}-zerolen.patch

Patch11: %{name}-%{version}-strcpy.patch

Patch12: thttpd-2.25b-getline.patch

Patch13: thttpd-2.25b-ipreal.patch

[ ]

%prep

%setup -q -a 1

%patch0

%patch1

%patch2

%patch3

%patch4

%patch5

%patch6

%patch7

%patch8

%patch9

%patch10

%patch11

%patch12

%patch13

Trang 6

[ ]

Xây dựng gói Thttpd rpm như sau:

rpmbuild -ba thttpd.spec

Thttpd rpm sẽ được khởi tạo trong /usr/src/packages/RPMS/x86_64

(/usr/src/packages/RPMS/i386 nếu hệ thống của bạn là i386) vì vậy hãy vào đó:

cd /usr/src/packages/RPMS/x86_64

ls -l

server1:/usr/src/packages/RPMS/x86_64 # ls -l

total 276

-rw-r r 1 root root 278693 Oct 5 17:20 thttpd-2.25b-181.1.x86_64.rpm

server1:/usr/src/packages/RPMS/x86_64 #

Cài đặt gói Thttpd như sau:

rpm -ivh thttpd-2.25b-181.1.x86_64.rpm

Sau đó chúng ta sao lưu tập tin gốc /etc/thttpd.conf và tạo một cái mới:

mv /etc/thttpd.conf /etc/thttpd.conf_orig

vi /etc/thttpd.conf

# BEWARE : No empty lines are allowed!

# This section overrides defaults

# This section _documents_ defaults in effect

# port=80

# nosymlink # default = !chroot

# novhost

# nocgipat

Trang 7

# nothrottles

# host=0.0.0.0

# charset=iso-8859-1

host=127.0.0.1

port=8000

user=wwwrun

logfile=/var/log/thttpd.log

pidfile=/var/run/thttpd.pid

dir=/srv/www

cgipat=**.cgi|**.pl

nochroot

Điều này sẽ làm cho Thttpd nghe trên cổng 8000 của địa chỉ 127.0.0.1; thư mục root là /srv/www

Tạo hệ thống liên kết khởi động cho Thttpd:

chkconfig -f add thttpd

Và chạy nó:

/etc/init.d/thttpd start

Tiếp theo là tạo tập tin /etc/nginx/proxy.conf:

vi /etc/nginx/proxy.conf

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for;

Trang 8

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_connect_timeout 90;

proxy_send_timeout 90;

proxy_read_timeout 90;

Bây giờ bạn mở tập tin cấu hình vhost

vi /etc/nginx/nginx.conf

và thêm location /cgi-bin {} vào nội dung của server {}:

server {

[ ]

location /cgi-bin {

include proxy.conf;

proxy_pass http://127.0.0.1:8000;

}

[ ]

}

Khởi động lại nginx:

/etc/init.d/nginx reload

Bởi vì thư mục root của Thttpd là /srv/www, location /cgi-bin được chuyển tới

/srv/www/cgi-bin (điều này đúng cho toàn bộ vhost của bạn, do đó mỗi vhost phải

đặt các CGI script của nó trong /srv/www/cgi-bin; như vậy môi trường chia sẻ

hosting sẽ bị hạn chế Giải pháp là chúng ta sử dụng CGI wrapper được trình bày

trong mục 3 của bài viết)

Tạo thư mục:

Trang 9

mkdir /srv/www/cgi-bin

… và đặt các CGI script trong đó rồi thực thi chúng Vì mục đích thử nghiệm nên

chúng tôi sẽ tạo ra một Perl script nhỏ có tên Hello World (thay vì hello_world.cgi bạn có thể dùng phần mở rộng pl -> hello_world.pl):

vi /srv/www/cgi-bin/hello_world.cgi

#!/usr/bin/perl -w

# Tell perl to send a html header

# So your browser gets the output

# rather then <stdout>(command line

# on the server.)

print "Content-type: text/html\n\n";

# print your basic html tags

# and the content of them

print "<html><head><title>Hello World!!

</title></head>\n";

print "<body><h1>Hello world</h1></body></html>\n";

chmod 755 /srv/www/cgi-bin/hello_world.cgi

Mở trình duyệt của bạn lên và thử nghiệm script:

http://www.example.com/cgi-bin/hello_world.cgi

Nếu mọi thứ đều ok bạn sẽ thấy trang sau:

Trang 10

Sử dụng Fcgiwrap

Fcgiwrap là một CGI wrapper có thể được sử dụng trong môi trường chia sẻ

hosting bởi nó cho phép mỗi vhost sử dụng thư mục cgi-bin riêng

Gói fcgiwrap không có sẵn cho OpenSUSE, bạn cần xây dựng riêng cho mình Đầu tiên là cài đặt một số điều kiện:

zypper remove patterns-openSUSE-minimal_base

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

Tạo các symlink dưới đây;

ln -s /usr/include/fastcgi/fastcgi.h

/usr/local/include/

ln -s /usr/include/fastcgi/fcgi_config.h

Trang 11

/usr/local/include/

ln -s /usr/include/fastcgi/fcgi_stdio.h

/usr/local/include/

ln -s /usr/include/fastcgi/fcgiapp.h

/usr/local/include/

ln -s /usr/include/fastcgi/fcgimisc.h

/usr/local/include/

ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/

ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

Và sau đó bạn có thể xây dựng fcgiwrap:

cd /usr/local/src/

git clone git://github.com/gnosek/fcgiwrap.git

cd fcgiwrap

autoreconf -i

./configure

make

make install

Điều này sẽ cài đặt fcgiwrap trong /usr/local/sbin/fcgiwrap

Tiếp theo chúng ta cài đặt gói spawn-fcgi để cho phép chạy fcgiwrap như một

daemon:

zypper install spawn-fcgi

Khởi động fcgiwrap:

spawn-fcgi -u nginx -g nginx -s

/var/run/fcgiwrap.socket -S -M 0700 -F 1 -P

/var/run/spawn-fcgi.pid /usr/local/sbin/fcgiwrap

Bạn có thể tìm thấy socket fcgiwrap trong /var/run/fcgiwrap.socket, thuộc sở hữu bởi user và nhóm nginx

Trang 12

Nếu không muốn khởi động fcgiwrap thủ công cho từng thời điểm khởi động hệ

thống, mở /etc/init.d/boot.local

vi /etc/init.d/boot.local

Thêm lệnh spawn-fcgi vào cuối tập tin – điều này sẽ tự động khởi chạy fcgiwrap

vào cuối quá trình boot

#!/usr/bin/perl -w

# Tell perl to send a html header

# So your browser gets the output

# rather then <stdout>(command line

# on the server.)

print "Content-type: text/html\n\n";

# print your basic html tags

# and the content of them

print "<html><head><title>Hello World!!

</title></head>\n";

print "<body><h1>Hello world</h1></body></html>\n";

Bây giờ mở tập tin cấu hình vhost của bạn:

vi /etc/nginx/nginx.conf

và thêm location /cgi-bin {} trong nội dung của server {}:

server {

[ ]

location /cgi-bin/ {

Trang 13

# Disable gzip (it makes scripts feel slower since they have to complete

# before getting gzipped)

gzip off;

# Set the root to /usr/lib (inside this location this means that we are

# giving access to the files under /usr/lib/cgi-bin)

root /srv/www/www.example.com;

# Fastcgi socket

fastcgi_pass unix:/var/run/fcgiwrap.socket;

# Fastcgi parameters, include the standard ones

include /etc/nginx/fastcgi_params;

# Adjust non standard parameters (SCRIPT_FILENAME)

fastcgi_param SCRIPT_FILENAME

$document_root$fastcgi_script_name;

}

[ ]

}

Khởi động lại nginx:

Trang 14

/etc/init.d/nginx reload

Tiếp theo chúng ta tạo thư mục cgi-bin (/srv/www/www.example.com/cgi-bin) bởi

vì cần định nghĩa root /var/www/www.example.com; trong nội dung của location

/cgi-bin {}:

mkdir /srv/www/www.example.com/cgi-bin

Sau đó đặt CGI script vào và thực thi chúng Để thử nghiệm chúng tôi tạo ra một

Perl script nhỏ có tên Hello World (thay vì hello_world.cgi bạn có thể dùng phần

mở rộng pl -> hello_world.pl):

vi /srv/www/www.example.com/cgi-bin/hello_world.cgi

#!/usr/bin/perl -w

# Tell perl to send a html header

# So your browser gets the output

# rather then <stdout>(command line

# on the server.)

print "Content-type: text/html\n\n";

# print your basic html tags

# and the content of them

print "<html><head><title>Hello World!!

</title></head>\n";

print "<body><h1>Hello world</h1></body></html>\n";

chmod 755

/srv/www/www.example.com/cgi-bin/hello_world.cgi

Trang 15

Mở trình duyệt của bạn lên và thử nghiệm script:

http://www.example.com/cgi-bin/hello_world.cgi

Nếu mọi thứ đều ổn bạn sẽ thấy trang sau:

Ngày đăng: 18/02/2014, 09:20

HÌNH ẢNH LIÊN QUAN

Bây giờ bạn mở tập tin cấu hình vhost... - Tài liệu Sử dụng CGI Script với Nginx trên OpenSUSE 11.4 pptx
y giờ bạn mở tập tin cấu hình vhost (Trang 8)
Bây giờ mở tập tin cấu hình vhost của bạn: - Tài liệu Sử dụng CGI Script với Nginx trên OpenSUSE 11.4 pptx
y giờ mở tập tin cấu hình vhost của bạn: (Trang 12)

TỪ KHÓA LIÊN QUAN

w