Bài viết này mô tả cách định cấu hình mô-đun FastCGI và PHP để lưu trữ các ứng dụng PHP trên IIS 7 trở lên. QUAN TRỌNG. Bài viết này cung cấp hướng dẫn
12/05/2007
f1143e47-6a11-4429-b8e6-e106661a7187
/learning/application-frameworks/install-and-configure-php-applications-on-iis/using-fastcgi-to-host-php-applications-on-iis
tác giả nội dung
Sử dụng FastCGI để lưu trữ các ứng dụng PHP trên IIS 7của Ruslan Yakushev
Bài viết này mô tả cách định cấu hình mô-đun FastCGI và PHP để lưu trữ các ứng dụng PHP trên IIS 7 trở lên
[. QUAN TRỌNG]. loại hình ảnh = "biểu tượng" nguồn = "using-fastcgi-to-host-php-applications-on-iis/_static/image2. gif". Bài viết này hướng dẫn cách cài đặt và sử dụng thành phần FastCGI trên Windows Server 2008 và Windows Vista SP1. SP1 được yêu cầu trên Windows Vista
Tổng quan
Mô-đun FastCGI trong IIS cho phép các khung ứng dụng phổ biến hỗ trợ giao thức FastCGI được lưu trữ trên máy chủ Web IIS theo cách đáng tin cậy và hiệu suất cao. FastCGI cung cấp giải pháp thay thế hiệu suất cao cho Giao diện cổng chung [CGI], đây là cách tiêu chuẩn để giao tiếp các ứng dụng bên ngoài với máy chủ Web vốn là một phần của bộ tính năng IIS được hỗ trợ kể từ lần phát hành đầu tiên
Các chương trình CGI là các tệp thực thi được máy chủ Web khởi chạy cho mỗi yêu cầu để xử lý yêu cầu và tạo các phản hồi động sau đó được gửi lại cho máy khách. Vì nhiều khung trong số này không hỗ trợ thực thi đa luồng, CGI cho phép chúng thực thi đáng tin cậy trên IIS bằng cách thực hiện chính xác một yêu cầu cho mỗi quy trình. Thật không may, nó cung cấp hiệu suất kém do chi phí khởi động và tắt quy trình cho mỗi yêu cầu cao
FastCGI giải quyết các vấn đề về hiệu suất vốn có trong CGI bằng cách cung cấp một cơ chế để tái sử dụng lặp đi lặp lại một quy trình cho nhiều yêu cầu. Ngoài ra, FastCGI duy trì khả năng tương thích với các thư viện không an toàn theo luồng bằng cách cung cấp một nhóm các quy trình có thể tái sử dụng và đảm bảo rằng mỗi quy trình chỉ xử lý một yêu cầu tại một thời điểm
Kích hoạt Hỗ trợ FastCGI trong IIS
Windows Server 2008
Chuyển đến Trình quản lý máy chủ> Vai trò> Thêm dịch vụ vai trò. Trên trang Chọn dịch vụ vai trò, chọn hộp kiểm CGI. Điều này cho phép cả dịch vụ CGI và FastCGI
WinVista SP1
Chuyển đến Bảng điều khiển> Chương trình và Tính năng> Bật hoặc tắt các tính năng của Windows. Trong hộp thoại Tính năng của Windows, chọn hộp kiểm CGI. Điều này cho phép cả dịch vụ CGI và FastCGI
loại hình ảnh = "biểu tượng" nguồn = "using-fastcgi-to-host-php-applications-on-iis/_static/image2. gif". QUAN TRỌNG. Cài đặt Bản cập nhật cho Mô-đun FastCGI
Bản cập nhật cho mô-đun IIS FastCGI khắc phục một số sự cố tương thích đã biết với các ứng dụng PHP phổ biến. Cài đặt bản cập nhật từ một trong các vị trí sau
- Cập nhật cho Windows Server 2008
- Cập nhật cho phiên bản Windows Server 2008 x64
- Cập nhật cho Windows Server 2008 cho các hệ thống dựa trên Itanium
- Cập nhật cho Windows Vista SP1
- Bản cập nhật cho Windows Vista SP1 cho Hệ thống dựa trên x64
Cài đặt gói quản trị cho IIS
[. LƯU Ý] Bước này là tùy chọn
Trong số các tính năng hữu ích khác, Gói quản trị cho IIS có giao diện người dùng thuận tiện để định cấu hình cài đặt FastCGI. Gói quản trị có thể được cài đặt từ các vị trí sau
- Gói quản trị cho IIS 7 trở lên - x86
- Gói quản trị cho IIS 7 trở lên - x64
Cài đặt và cấu hình PHP
Bạn nên sử dụng bản dựng PHP an toàn không theo luồng với IIS FastCGI. Bản dựng PHP an toàn không theo luồng cung cấp hiệu suất tăng đáng kể so với bản dựng tiêu chuẩn bằng cách không thực hiện bất kỳ kiểm tra an toàn luồng nào, điều này không cần thiết, vì FastCGI đảm bảo môi trường thực thi theo luồng đơn
Để cài đặt PHP
Tải xuống gói zip an toàn không luồng mới nhất với các tệp nhị phân của PHP. http. //www. php. mạng/tải xuống. php
Giải nén các tập tin vào thư mục bạn chọn [e. g.
C:\PHP
]. Đổi tên php. ini được đề xuất thành tệp php. ban đầumở php. tập tin ini. Bỏ ghi chú và sửa đổi cài đặt như sau
Đặt fastcgi. mạo danh = 1. FastCGI trong IIS hỗ trợ khả năng mạo danh mã thông báo bảo mật của máy khách đang gọi. Điều này cho phép IIS xác định ngữ cảnh bảo mật mà yêu cầu chạy bên dưới
Đặt cgi. fix_pathinfo=1. cgi. fix_pathinfo cung cấp hỗ trợ *thực* PATH_INFO/PATH_TRANSLATED cho CGI. Trước đây, hành vi của PHP là đặt PATH_TRANSLATED thành SCRIPT_FILENAME và không xác định PATH_INFO. Để biết thêm thông tin về PATH_INFO, hãy xem thông số cgi. Đặt giá trị này thành 1 sẽ khiến PHP CGI sửa đường dẫn của nó để phù hợp với thông số kỹ thuật
Đặt cgi. lực_redirect = 0
Đặt open_basedir để trỏ đến thư mục hoặc đường dẫn mạng chứa nội dung của [các] trang Web
Đặt extension_dir để trỏ đến vị trí đặt các tiện ích mở rộng PHP. Thông thường, đối với PHP 5. 2. X, giá trị sẽ được đặt là extension_dir = ". /ext"
Kích hoạt tiện ích mở rộng PHP được yêu cầu bằng cách bỏ nhận xét các dòng tương ứng, chẳng hạn
tiện ích mở rộng = php_mssql. dll
tiện ích mở rộng = php_mysql. dll
Mở dấu nhắc lệnh và chạy lệnh sau để xác minh rằng PHP đã cài đặt thành công
[. code-consoleMain]
Nếu PHP được cài đặt chính xác và tất cả các phụ thuộc của nó có sẵn trên máy, lệnh này sẽ xuất thông tin cấu hình PHP hiện tại
Định cấu hình IIS để xử lý các yêu cầu PHP
Để IIS lưu trữ các ứng dụng PHP, bạn phải thêm một ánh xạ trình xử lý yêu cầu IIS chuyển tất cả các yêu cầu dành riêng cho PHP tới khung ứng dụng PHP bằng cách sử dụng giao thức FastCGI
Định cấu hình IIS để xử lý các yêu cầu PHP bằng cách sử dụng Trình quản lý IIS
Mở trình quản lý IIS. Ở cấp độ máy chủ, bấm đúp vào Ánh xạ trình xử lý
Trong ngăn Hành động, nhấp vào Thêm ánh xạ mô-đun. Trong hộp thoại Thêm bản đồ mô-đun, chỉ định cài đặt cấu hình như sau
- đường dẫn yêu cầu. *. php
- mô-đun. FastCgiModule
- thực thi được. "C. [Đường dẫn đến bản cài đặt PHP của bạn]\php-cgi. exe"
- Tên. PHP qua FastCGI
Nhấp vào OK
Trong hộp thoại xác nhận Thêm bản đồ mô-đun hỏi bạn có muốn tạo ứng dụng FastCGI cho tệp thực thi này không, bấm Có
Kiểm tra xem ánh xạ trình xử lý có hoạt động chính xác không bằng cách tạo tệp phpinfo. php trong thư mục
C:\inetpub\wwwroot
có chứa đoạn mã sau[. mã-xmlMain]
Mở trình duyệt và điều hướng đến
//localhost/phpinfo.php
. Nếu mọi thứ đã được thiết lập chính xác, bạn sẽ thấy trang thông tin PHP chuẩn[. LƯU Ý] Nếu bạn không thấy FastCgiModule trong Mô-đun. danh sách, mô-đun chưa được đăng ký hoặc chưa được bật. Để kiểm tra xem mô-đun FastCGI đã được đăng ký hay chưa, hãy mở tệp cấu hình IIS có tại
%windir%\windows\system32\config\applicationHost.config
và kiểm tra xem dòng sau có trong phầnkhông
[. mã-xmlMain]
Trong cùng một tệp, cũng kiểm tra xem mô-đun FastCGI có được thêm vào phần
không
[. mã-xmlMain]
Định cấu hình IIS để xử lý các yêu cầu PHP bằng cách sử dụng dòng lệnh
Ngoài ra, bạn có thể hoàn thành các bước trên bằng cách sử dụng công cụ dòng lệnh A ppCmd
Tạo nhóm quy trình ứng dụng FastCGI bằng cách chạy lệnh sau
[. code-consoleMain]
Tạo ánh xạ xử lý bằng cách chạy lệnh sau
[. code-consoleMain]
[. LƯU Ý] Nếu bạn đang sử dụng PHP phiên bản 4. X, bạn có thể sử dụng php. exe thay vì php-cgi. người cũ
Thực tiễn tốt nhất để định cấu hình FastCGI và PHP
Tải xuống //download.microsoft.com/download/A/2/F/A2F199C0-672E-44E6-BF1D-878E233C3F08/hostingPHPonIIS7.zip "Hosting PHP"
chứa bản trình bày tóm tắt về các phương pháp hay nhất để lưu trữ PHP trong môi trường lưu trữ được chia sẻ
Cách ly bảo mật cho các trang web PHP
Đề xuất cách ly các trang web PHP trong môi trường lưu trữ được chia sẻ phù hợp với tất cả các đề xuất cách ly bảo mật chung cho IIS. Đặc biệt, nên
- Sử dụng một nhóm ứng dụng cho mỗi trang Web
- Sử dụng tài khoản người dùng chuyên dụng làm danh tính cho nhóm ứng dụng
- Định cấu hình danh tính người dùng ẩn danh để sử dụng danh tính nhóm ứng dụng
- Đảm bảo rằng giả mạo FastCGI được bật trong php. ini [fastcgi. mạo danh = 1]
Để biết thêm chi tiết về cách ly bảo mật trong môi trường lưu trữ được chia sẻ, hãy xem Đảm bảo cách ly bảo mật cho các trang web
Hành vi tái chế quy trình PHP
Đảm bảo rằng FastCGI luôn tái chế php-cgi. exe trước khi quá trình tái chế PHP gốc bắt đầu. Hành vi tái chế quy trình FastCGI được kiểm soát bởi thuộc tính cấu hình instanceMaxRequests. Thuộc tính này chỉ định số lượng yêu cầu mà quy trình FastCGI sẽ xử lý trước khi tái chế. PHP cũng có chức năng tái chế quy trình tương tự được kiểm soát bởi biến môi trường PHP_FCGI_MAX_REQUESTS. Bằng cách đặt instanceMaxRequests nhỏ hơn hoặc bằng PHP_FCGI_MAX_REQUESTS, bạn có thể đảm bảo rằng logic tái chế quy trình PHP gốc sẽ không bao giờ khởi động
Cài đặt FastCGI có thể được định cấu hình bằng cách sử dụng Trình quản lý IIS hoặc bằng cách sử dụng công cụ dòng lệnh A ppCmd
Định cấu hình cài đặt tái chế FastCGI bằng cách sử dụng Trình quản lý IIS
Đảm bảo rằng đã được cài đặt trên máy chủ của bạn. Mở trình quản lý IIS. Ở cấp độ máy chủ, bấm đúp vào Cài đặt FastCGI
Chọn ứng dụng FastCGI mà bạn muốn cấu hình. Trong ngăn Hành động, nhấp vào Chỉnh sửa
Trong hộp thoại Chỉnh sửa ứng dụng FastCGI, đặt InstanceMaxRequests thành 10000. Bên cạnh cài đặt Biến môi trường, bấm vào nút Duyệt [. ] cái nút
Trong hộp thoại Trình chỉnh sửa bộ sưu tập biến môi trường, hãy thêm biến môi trường PHP_FCGI_MAX_REQUESTS và đặt giá trị của nó thành 10000
[. LƯU Ý] Nếu bạn không định cấu hình các cài đặt này, các cài đặt mặc định sau sẽ được sử dụng. instanceMaxRequests = 200, PHP_FCGI_MAX_REQUESTS = 500 [trên hầu hết các bản dựng PHP]
Định cấu hình cài đặt tái chế FastCGI bằng cách sử dụng dòng lệnh
Định cấu hình hành vi tái chế của FastCGI và PHP bằng cách sử dụng AppCmd bằng cách chạy các lệnh sau
[. code-consoleMain]
Phiên bản PHP
Nhiều ứng dụng PHP dựa vào các chức năng hoặc tính năng chỉ có trong một số phiên bản PHP nhất định. Nếu các loại ứng dụng này được lưu trữ trên cùng một máy chủ, các phiên bản PHP khác nhau phải được bật và chạy song song. Trình xử lý IIS FastCGI hỗ trợ đầy đủ việc chạy nhiều phiên bản PHP trên cùng một máy chủ Web
Ví dụ: giả sử rằng trên máy chủ Web của bạn, bạn dự định hỗ trợ PHP 4. 4. 8, PHP5. 2. 1 và PHP5. 2. 5 không chủ đề an toàn. Để bật cấu hình đó, bạn phải đặt các tệp nhị phân PHP tương ứng trong các thư mục riêng biệt trên hệ thống tệp [e. g. C:\php448\
, C:\php521\
và C:\php525nts
] rồi tạo nhóm quy trình ứng dụng FastCGI cho mỗi phiên bản
[. code-consoleMain]
Nếu bạn có ba trang Web [site1, site2, site3] và mỗi trang web phải sử dụng một phiên bản PHP khác nhau, giờ đây bạn có thể xác định ánh xạ trình xử lý trên từng trang web đó để tham chiếu nhóm quy trình ứng dụng FastCGI tương ứng
[. LƯU Ý] Mỗi nhóm quy trình FastCGI được xác định duy nhất bằng sự kết hợp của các thuộc tính fullPath và đối số
[. code-consoleMain]
Khuyến nghị bảo mật PHP
Các cài đặt sau có thể được sử dụng để thắt chặt bảo mật cho cài đặt PHP. Để thực hiện các thay đổi được đề xuất, hãy định vị và mở tệp php. ini và chỉnh sửa cài đặt cấu hình như được mô tả bên dưới
SettingDescriptionallow_url_fopen=Tắt allow_url_include=Tắt URL từ xa cho các chức năng xử lý tệp, điều này có thể gây ra lỗ hổng chèn mã. register_globals=Tắt register_globals. open_basedir="c. \inetpub"Hạn chế nơi quy trình PHP có thể đọc và ghi trên hệ thống tệp. safe_mode=Tắt safe_mode_gid=Tắt chế độ an toàn. max_execution_time=30 max_input_time=60Giới hạn thời gian thực thi tập lệnh. memory_limit=16M upload_max_filesize=2M post_max_size=8M max_input_nesting_levels=64Giới hạn sử dụng bộ nhớ và kích thước tệp. display_errors=Tắt log_errors=Bật error_log="C. \path\of\your\choice"Cấu hình thông báo lỗi và ghi nhật ký. nhanhcgi. logging=0Mô-đun IIS FastCGI sẽ không yêu cầu khi PHP gửi bất kỳ dữ liệu nào trên thiết bị lỗi chuẩn bằng cách sử dụng giao thức FastCGI. Vô hiệu hóa ghi nhật ký FastCGI để ngăn PHP gửi thông tin lỗi qua thiết bị lỗi chuẩn và tạo 500 mã phản hồi cho máy khách. Exposure_php=OffẨn sự hiện diện của PHPKích hoạt cấu hình PHP trên mỗi trang web
Phần này mô tả cách được đề xuất để kích hoạt cấu hình PHP trên mỗi trang web. Đề xuất này đã được Radney Jasmin phát hiện và xác thực với nhà cung cấp dịch vụ lưu trữ GoDaddy. com hiện cung cấp dịch vụ lưu trữ PHP trên Windows Server 2008 bằng cách sử dụng FastCGI
Nhóm quy trình PHP trên mỗi trang web
Khi mỗi trang Web có nhóm ứng dụng riêng, đây là một thực tiễn được khuyến nghị trên IIS, có thể liên kết nhóm quy trình FastCGI chuyên dụng với từng trang Web. Nhóm quy trình FastCGI được xác định duy nhất bởi sự kết hợp của thuộc tính fullPath và đối số. Nếu bạn cần tạo một số nhóm quy trình FastCGI cho cùng một quy trình có thể thực thi được, chẳng hạn như php-cgi. exe, bạn có thể sử dụng thuộc tính đối số để phân biệt các định nghĩa nhóm quy trình. Với php-cgi. exe, bạn cũng có thể sử dụng công tắc dòng lệnh "-d" để xác định mục nhập INI cho quy trình PHP. Bạn có thể sử dụng công tắc này để đặt cài đặt PHP làm cho chuỗi đối số trở nên duy nhất
Ví dụ: nếu có hai trang Web "website1" và "website2" phải có bộ cài đặt PHP riêng, nhóm quy trình FastCGI có thể được định nghĩa như sau
[. mã-xmlMain]
Trong ví dụ này, cài đặt PHP open_basedir được sử dụng để phân biệt giữa các định nghĩa nhóm quy trình. Cài đặt này cũng thực thi rằng tệp thực thi PHP cho mỗi nhóm quy trình chỉ có thể thực hiện các thao tác tệp trong thư mục gốc của trang Web tương ứng
Sau đó, website1 có thể có ánh xạ trình xử lý PHP như sau
[. mã-xmlMain]
và website2 có thể có ánh xạ trình xử lý PHP như sau
[. mã-xmlMain]
Chỉ định php. vị trí ban đầu
Khi quá trình PHP bắt đầu, nó sẽ xác định vị trí của cấu hình php. ini bằng cách sử dụng các cài đặt khác nhau. Tài liệu PHP cung cấp mô tả chi tiết về quy trình khởi động PHP. Một trong những nơi mà quy trình PHP tìm kiếm tệp php. ini là biến môi trường PHPRC. Nếu quá trình PHP tìm thấy một php. ini trong đường dẫn được chỉ định trong biến môi trường này, nó sẽ sử dụng nó; . tập tin ini. Biến môi trường này có thể được sử dụng để cho phép khách hàng lưu trữ sử dụng các phiên bản php của riêng họ. tập tin ini
Ví dụ: nếu có hai trang Web "website1" và "website2" nằm ở đường dẫn tệp sau. C:\inetpub\wwwroot
0 và C:\inetpub\wwwroot
1, bạn có thể định cấu hình php-cgi. nhóm quy trình exe trong phần C:\inetpub\wwwroot
2 của applicationHost. tập tin cấu hình như sau
[. mã-xmlMain]
Bằng cách này, trang web1 có thể có phiên bản php của riêng mình. ini nằm trong C:\inetpub\wwwroot
0, trong khi trang web2 có thể có phiên bản php riêng. ini nằm ở C:\inetpub\wwwroot
1. Cấu hình này cũng đảm bảo rằng nếu một php. ini không thể tìm thấy ở vị trí được chỉ định bởi biến môi trường PHPRC, thì PHP sẽ sử dụng php mặc định. ini nằm trong cùng thư mục chứa tệp php-cgi. exe được định vị
Cung cấp chức năng viết lại URL cho các ứng dụng PHP
Phần lớn các ứng dụng PHP phổ biến đều dựa vào chức năng viết lại URL trong các máy chủ Web để kích hoạt các URL thân thiện với người dùng và công cụ tìm kiếm. IIS cung cấp khả năng viết lại URL bằng cách sử dụng mô-đun viết lại URL
Để biết thêm thông tin về cách sử dụng mô-đun Viết lại URL, hãy xem các bài viết sau
Hướng dẫn mô-đun viết lại URL của Microsoft. Mô tả cách sử dụng mô-đun Viết lại URL
Microsoft URL Rewrite Tham chiếu cấu hình mô-đun Giải thích chức năng của mô-đun và cung cấp các mô tả về tất cả các tùy chọn cấu hình
PHP có thể được lưu trữ trong IIS không?
Giới thiệu Cách nhanh nhất và dễ dàng nhất để cài đặt PHP trên Dịch vụ thông tin Internet [IIS] là sử dụng Trình cài đặt nền tảng web Microsoft ® [Web PI].Làm thế nào để triển khai trang web PHP trên máy chủ?
Triển khai các ứng dụng PHP trong vòng vài phút. Bốn công cụ tự động hóa để cắt giảm thời gian triển khai .Tạo tài khoản DeployHQTạo một dự án mới trong DeployHQKết nối DeployHQ với kho mã của bạnThêm đường dẫn của kho lưu trữ GithubCấu hình máy chủTriển khaiNgười dùng nào PHP chạy dưới dạng IIS?
Vì vậy, PHP sử dụng cùng một tài khoản IIS của bạn [w3wp. exe] sử dụng. [ Người dùng. IUSR ]. Lưu câu trả lời này.