در صورتی که شما دوست دارید سرور مجازی و سرور اختصاصی خود را مدیریت کنید متن زیر می تواند به شما در تنظیمات php کمک کند. لازم به ذکر است این تنظیمات مربوط به سرور های مجازی و یا سرور اختصاصی می باشد که سیستم عامل ویندوز برروی آنها نصب است.
به طور خاص توصیه می شود php برای هاست های اشتراکی جهت استفاده از iis به منظور بالا بردن امنیت سایت ها جداسازی شود و توصیه های زیر در نظر گرفته شود.
- برای هر وب سایت به صورت جداگانه از Application Pool استفاده شود.
- از یک حساب کاربری اختصاصی برای شناسایی Application Pool استفاده کنید.
- تنظیمات، کاربر ناشناس را جهت شناسایی کاربر Application Pool انجام دهید.
- اطمینان حاصل کنید که impersonation در fastCGI در فایل ini فعال است.
(fastcgi.impersonate=1)
فرایند Recycling در پرسه های php:
اطمینان حاصل کنید FastCGI همیشه پردازش های php-Cgi.exe را قبل از فرایند Recycling در پرسه های php انجام می دهد.
عملکرد FastCGI process recycling توسط instanceMaxRequests در تنظیمات کنترل خواهد شد. این ویژگی مشخص می کند که چگونه بسیاری از خواسته های FastCGI process قبل از recycling پردازش می شوند.
Php همچنین قابلیت پردازشی مشابهی دارد که توسط متغیر PHP_FCGI_MAX_REQUESTS کنترل می شوند.
برای اطمینان از عملکرد recycling در پرسه های php بهتر است مقدار instanceMaxRequests را بر روی مقداری برابر یا کمتر از PHP_FCGI_MAX_REQUESTS تنظیم کنید.
تنظیمات fastCGI را می توانید توسط iis manager یا خط فرمان انجام دهید.
انجام تنظیمات FastCGI recycling settings با استفاده از iis manager :
اطمینان حاصل کنید Administration Pack for IIS بر روی سرور نصب است. حال Open IIS Manager را باز کنید و در سطح سرور بر روی FastCGI Setting دابل کلیک کنید.
FastCGI Application ی را که می خواهید پیکربندی کنید انتخاب نمایید در قیمت Actions بر روی edit کلیک کنید.
در کادر محاوره Edit FastCGI Appliction مقدار InstanceMaxRequests را برروی 10000 تنظیم و سپس بر روی دکمه … مقابل EnvironmentVariables کلیک نمایید .
در کادر محاوره EnvironmentVariables مقدار PHP_FCGI_MAX_REQUESTS را اضافه نمایید و مقدار آن را روی 10000 تنظیم کنید.
پیکربندی تنظیمات FastCGI Recycling توسط خط فرمان cmd :
برای انجام تنظیمات توسط خط فرمان می توانید دستورات زیر را وارد نمایید.
C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath=’c:\{php_folder}\php-cgi.exe’].instanceMaxRequests:10000
C:\>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+”[fullPath=’C:\{php_folder}\php-cgi.exe’].environmentVariables.[name=’PHP_FCGI_MAX_REQUESTS’,value=’10000′]”
نسخه php :
بسیاری از برنامه های php با توابع یا ویژگی هایی که در نسخه خاصی از php در دسترس هستند کار می کنند. برای استفاده از این برنامه باید بر روی سرور میزبانی شونده، نسخه های مختلف php فعال و در کنار هم اجرا شوند.
به عنوان مثال: فرض کنید در وب سرور شما قصد دارید روی پلن های PHP 4.4.8, PHP 5.2.1, PHP 5.2.5 از non-thread safe پشتیبانی کنید.
برای فعال کردن این تنظیمات شما باید فایل های مربوط را در مسیر ها زیر قرار دهید.
C:\php448\
C:\php521\
C:\php525nts
و پس FastCGI application process pools را برای هر یک از ورژن ها مانند زیر ایجاد کنید.
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php448\php.exe’]
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php521\php-cgi.exe’]
C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath=’c:\php525nts\php-cgi.exe’]
اگر شما سه وب سایت دارید (site1, site2,site3) و هر کدام از این وب سایت ها از یک نسخه خاص از php استفاده می کنند. حال شما می توانید handler mappings مربوط به هر کدام را در FastCGI application process pool ایجاد کنید.
C:\>%windir%\system32\inetsrv\appcmd set config site1 –section:system.webServer/handlers /+”..[name=’PHP448_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php448\php.exe’,resourceType=’Either’]
C:\>%windir%\system32\inetsrv\appcmd set config site2 –section:system.webServer/handlers /+”..[name=’PHP521_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php521\php-cgi.exe’,resourceType=’Either’]
C:\>%windir%\system32\inetsrv\appcmd set config site3 –section:system.webServer/handlers /+”..[name=’PHP525nts_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php525nts\php-cgi.exe’,resourceType=’Either’]
توصیه های امنیتی در رابطه با php:
برای بالا بردن امنیت نسخه php نصب شد توصیه می شود تغییرات زیر را در فایل php.ini خود ایجاد کنید.
allow_url_fopen=Off
allow_url_include=Off
register_globals=Off
open_basedir=”c:\inetpub”
safe_mode=Off
safe_mode_gid=Offmax_execution_time=30
max_input_time=60
memory_limit=16M
upload_max_filesize=2M
post_max_size=8M
max_input_nesting_levels=64
display_errors=Off
log_errors=On error_log=”C:\path\of\your\choice”
fastcgi.logging=0
expose_php=Off
فعال کردن تنظیمات php در هر سایت :
در این بخش درباره تنظیمات php برای هر سایت صبحت خواهد شد. هنگامی که هر وب سایت دارای Application Pool مخصوص به خود باشد ممکن است بتوانید یک FastCGIProcess Pool اختصاصی برای هر وب سایت ایجاد کنید.یک FastCGIProcess Pool به وسیله ترکیبی از FullPath و ویژگی استدلالی به صورت منحصر به فرد شناخته می شوند.
اگر شما نیاز دارید چندین FastCGIProcess Pool برای پرسه های اجرای یکسان مانند php-cgi ایجاد کنید شما می توانید از ویژگی های استدالی برای تشخیص تعاریف Process Pool استفاده کنید.
برای مثال اگر دو وب سایت website1 و website2 وجود داشته باشند که باید مجموعه ای از تنظیمات php مربوط به خود داشته باشند می توانید استراتژی های FastCGI به صورت زیر تعریف کنید.
<fastCgi>
<application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website1″ />
<application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website2″ />
</fastCgi>
در این مثال، تنظیمات php روی open_basedir برای تشخیص تعاریف بین process استفاده می شود این تنظیمات همچنین PHP executable را برای process pool انجام می دهد. شما می توانید،عملیات مربوط به فایل را فقط در پوشه ریشه وب سایت مربوطه انجام دهید.
سپس website1 می تواند php handler mapping را به صورت زیر نمایش دهد.
<system.webServer>
<handlers accessPolicy=”Read, Script”>
<add name=”PHP via FastCGI” path=”*.php” verb=”*” modules=”FastCgiModule” scriptProcessor=”C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1″ resourceType=”Unspecified” requireAccess=”Script” />
</handlers>
</system.webServer>
و website2 می تواند php handler mapping را به صورت زیر نمایش دهد.
<system.webServer>
<handlers accessPolicy=”Read, Script”>
<add name=”PHP via FastCGI” path=”*.php” verb=”*” modules=”FastCgiModule” scriptProcessor=”C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2″ resourceType=”Unspecified” requireAccess=”Script” />
</handlers>
</system.webServer>
مشخص کردن محل فایل php.ini:
هنگامی که می خواهیم از پرسه های php استفاده کنیم ابتدا باید محل قرار گیری فایل php.ini را بااستفاده از تنظیمات مشخص کنیم. مستندات php معمولا شرح مفصلی از فرایند راه اندازی php را ارائه می دهند. یکی از مکان های که پروسه های php برای دریافت محل فایل php.ini جستجو می کند متغیر محلی PHPRC می باشد. اگر پروسه های php یک فایل php.ini در مسیر که متغییر محیطی phprc معرفی کرده است پیدا کند از آن استفاده خواهد شد در غیر این صورت به محل پیش فرض قرارگیری فایل php.ini خواهد رفت و از آن فایل استفاده خواهد کرد . از متغیر محیطی PHPRC برای این منظور استفاده خواهد شد تا کاربران بتوانند فایل php.ini مورد نظر خود را تعریف و استفاده کنند. به عنوان مثال اگر دو وب سایت نام های website1 و website2 وجود دارند که در مسیر فایل های زیر قرار گرفته اند
C:\website\website1 و C:\website\website2 شما می توانید پلاگین های php.cgi.exe را در بخش FastCGI فایل FileHost.config به شرح زیر انجام دهید.
<fastCgi>
<application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\Websites\Website1″>
<environmentVariables>
<environmentVariable name=”PHPRC” value=”C:\WebSites\website1″ />
</environmentVariables>
</application>
<application fullPath=”C:\PHP\php-cgi.exe” arguments=”-d open_basedir=C:\WebSites\Website2″>
<environmentVariables>
<environmentVariable name=”PHPRC” value=”C:\WebSites\website2″ />
</environmentVariables>
</application>
</fastCgi>
به این ترتیب website1 می تواند نسخه شخصی خود را از فایل php.ini در مسیر C:\WebSites\website1 و website2 در مسیر C:\WebSites\website2 قرار دهند . این پیکربندی نیز تضمین می کند اگر یک فایل php.ini در مکان مشخص شده توسط متغییر PHPRC مشخص نشود php از پرونده php.ini پیش فرض استفاده خواهد کرد که همان پوشه ی قرار دارد که Php-CGI-exe در آن قرار دارد.