Още един вариант на WEB сървър във Windows. За разлика от Apache тук ползваните ресурси са по-малко, а и работи една идея по-бързо.
За начало да смъкнем програмата от https://nginx.org/en/download.html. От страницата избираме стабилната версия (Stable version) >> nginix/Windows (в случая е Windows-1.26.3). Точния линк в моя случай е https://nginx.org/download/nginx-1.26.3.zip. Разопаковаме nginx-1.26.3.zip.. Главната разопакована папка се получава nginx-1.26.3. Преименуваме я на nginx. Получената папка nginx я преместваме на C:\. Трябва да получите C:\nginx. Сега да поправим главния конфигурационнен файл. Натискаме комбинацията от клавиши Win+R и в Run прозореца пишем:
notepad C:\nginx\conf\nginx.conf #user nobody; worker_processes auto; ### Трябва да сложите броя на ядрата които имате (core+vcore), ако не знаете оставете auto #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
Това е оригиналния файл, да го конфигурираме за нас. Уговорката, че ще ползваме повече от един виртуален хост. Първо правим копие на оригиналния конфигурационнен файл, а след това създаваме нашия.
copy c:\nginx\conf\nginx.conf c:\nginx\conf\nginx.conf.original notepad C:\nginx\conf\nginx.conf ### Трябва да изглежда така: worker_processes auto; ### auto, защото системата сама да определи колко ядра ще ползва error_log logs/error.log warn; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; client_max_body_size 150m; server { listen 90; server_name localhost; root html; location / { index index.html index.htm; } } }
Забележете !!! Работим на порт 90, а не както е стандартно на 80. Това е така защото на порт 80 в моя случай ползвам Apache. На по-късен етап ще се прехвърлим на порт 80. Да направим два скрипта с които да пускаме и спираме Nginx.
### Стартираме Nginx notepad c:\nginx\start.bat @ECHO ON set SRVPATH=C:\nginx start /D %SRVPATH% nginx.exe tasklist /fi "imagename eq nginx.exe" pause ### Спираме Nginx. notepad c:\nginx\stop.bat @ECHO ON taskkill /f /IM nginx.exe tasklist /fi "imagename eq nginx.exe" pause ### Рестартираме Nginx notepad c:\nginx\restart.bat @ECHO ON taskkill /f /IM nginx.exe set SRVPATH=C:\nginx start /D %SRVPATH% nginx.exe tasklist /fi "imagename eq nginx.exe" pause
Сега можем да пускаме/спираме Ngnix без да пишем дълги команди по терминала. Да направим това.
c:\nginx\stop.bat c:\nginx\start.bat c:\nginx\restart.bat
Ако пробваме в браузъра http://localhost:90 ще се отвори стандартната стартираща страница на Nginx.
За да работи Nginx с PHP то той трябва да се изтегли и сложи на машината. Да смъкнем PHP от https://windows.php.net/download#php-8.3. Ще ползваме версия PHP 8.3 (8.3.19). И ще смъкнем zip пакета който в случая е 30МВ. Внимание !!! Ползвайте Non Thread Safe. Когато правите това упражнение версията най-вероятно ще е различна. Обърнете внимание, която версия предлага нея ползвайте. Получи ми се един бъг с версия 8.2. Когато трябваше да се отвори страницата тя излизаше празна. Излезе проблем с версията 8.2. Разархивираме zip пакета и съдържанието му го слагаме в C:\nginx\php\ Има още едно условие за да работи php-cgi.exe и това е наличието на Microsoft Visual C++. В този случай ползваме версия 2015-2022. Може да се смъкне от https://www.microsoft.com/en-us/download/details.aspx?id=48145 и да се инсталира
Ако влезем в папката C:\nginx\php\ ще видим много ЕХЕ файлове. Примерно има php.exe, php-cgi.exe php-win.exe и т.н. По стари спомени php.exe се отнасяше при използване на Apache. Ние ползваме Ngnix и в нашия случай ще е php-cgi.exe. За да работи Nginix с PHP трябва да се дефинира тяхната връзка. За тази цел в Linux се ползва или Unix сокет или TCP сокет. Тук ще ползваме TCP сокет. Да поправим конфигурационния файл за виртуалните хостове (да включим PHP).
notepad C:\nginx\conf\nginx.conf worker_processes auto; error_log logs/error.log warn; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; client_max_body_size 150m; server { listen 80; server_name localhost; root html; location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
Да сложим тестови PHP файлове в папките на виртуалните хостове.
echo '<? php phpinfo(); ?>' >> C:\nginx\html\index.php
Спираме и пускам е Nginx. За да работи Nginx с PHP е необходимо да се пусне и php-cgi.exe Да редактираме стопиращия и стартиращия скрипт които създадохме по-горе.
notepad c:\nginx\start.bat ### Стартиращ скрипт @ECHO OFF ECHO Starting PHP FastCGI... C:\nginx\RunHiddenConsole.exe C:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 ECHO Starting NGINX start C:\nginx\nginx.exe tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" popd EXIT /b ### Стопиращ скрипт @ECHO OFF taskkill /f /IM nginx.exe taskkill /f /IM php-cgi.exe tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" popd EXIT /b ### Скрипт за Restart и наблюдение @ECHO ON taskkill /f /IM nginx.exe taskkill /f /IM php-cgi.exe ECHO Starting PHP FastCGI... C:\nginx\RunHiddenConsole.exe C:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 ECHO Starting NGINX start C:\nginx\nginx.exe tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" pause
Обърнете внимание, ползваме RunHiddenConsole.exe. Този изпълним файл позволява да стартирате сесията на заден план, без да виждате "зависналия" терминален прозорец. Самата програма можете да я изтеглите от: https://tlan.net/menu/windows/programs/winnet/nginx/pic/RunHiddenConsole.exe. Обърнете внимание на рестартиращия скрипт. Накрая завършваме с pause. След като завършите с настройките махнете тази опция. За сега е така за да може да видим какво точно се стартира и дали е правилно стартирал процеса. За да работи правилно PHP трябва да се конфигурира точно. Примерно искаме да ползваме PHP заедно с MySQL то тогава трябва да укажем ползването на плъгина му. Това става чрез конфигурационния файл C:\nginx\php\php.ini. Да създадем php.ini от подготвените при инсталацията на PHP.
copy C:\nginx\php\php.ini-development C:\nginx\php\php.ini
Сега можем "тънко" да настроим PHP. Ако искаме пък да проверим дали сме направили правилно някой конфигурационен файл на PHP може да ползваме следната команда:
C:\nginx\php\php.exe -l C:\nginx\html\test\index.php
Тази тема бях я развивал в секцията Linux. Идеята е същата само дефинирането на пътищата е малко по-различно. Първо да нека два виртуални домейна да отговарят на localhost. Домейните да се наричат tlan.local и tachko.local.
### Моя администратор се нарича administrator, вашия може да е друго име runas /user:administrator "notepad C:\Windows\System32\drivers\etc\hosts" ### Ще поиска да въведете паролата на администратора # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost 127.0.0.1 localhost 127.0.0.1 tlan.local 127.0.0.1 tachko.local
Има шанс да не позволи да пишете във файла, защото нямате права върху него. В моя случай съм оправил този проблем през Security на файла. Да създадем два виртуални хоста.
notepad C:\nginx\conf\nginx.conf worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name tachko.local; root "G:/GDisk/My Drive/WWW/tachko.local/"; error_log c:/nginx/logs/tachko.local.error.log; access_log c:/nginx/logs/tachko.local.access.log; location / { index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 80; server_name tlan.local; root D:/Clouds/OneDrive/WWW/tlan.local/; error_log c:/nginx/logs/tlan.local.error.log; access_log c:/nginx/logs/tlan.local.access.log; location / { index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } } mkdir D:\Clouds\OneDrive\WWW\tachko.local\ mkdir D:\Clouds\OneDrive\WWW\tlan.local\
Да създадем и PHP файлове в съответните директории.
echo '<? php phpinfo(); ?>' >> "G:\GDisk\My Drive\WWW\tachko.local\index.php" echo '<? php phpinfo(); ?>' >> D:\Clouds\OneDrive\WWW\tlan.local\index.php
Рестартираме Nginx и php-cgi.
Можем да пробваме на http://tachko.local и http://tlan.local. До тук всичко работи нормално. Още един вариант на конфигурационен файл за виртуален хост.
server { listen 80; server_name localhost; index index.php; error_log c:/nginx/logs/localhost.error.log; access_log c:/nginx/logs/localhost.access.log; root c:/nginx/html; location / { try_files $uri /index.php$is_args$args; } location ~ \.php { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; } }
Също работи нормално.
Накъде без бази данни? За да работи пълноценно WEB сървъра е необходим и MySQL. На по-късен етап ще го привържем към Nginx и PHP чрез php.ini. Започваме с инсталацията му. Имаме два пътя, или чрез инсталационния пакет или да ползваме архив. Да се пробваме чрез втория вариант. От https://dev.mysql.com/downloads/mysql/ смъкваме Windows (x86, 64-bit), ZIP Archive. След това разопаковаме архива в C:\Nginx. Трябва да получите C:\nginx\mysql. През терминален прозорец да инициализираме MySQL
cd C:\nginx\mysql\bin mysqld --initialize-insecure
Сега можем да стартираме MySQL като демон.
mysqld --console
Тази команда за съжаление ще блокира прозореца защото MySQL се изпълнява като демон и ако затворите прозореца ще прекъснете процеса. Отваряме втори терминален прозорец. И чрез него ще влезем в MySQL.
mysql -u root
В MySQL 8.0 и по-нови, плъгинът за удостоверяване по подразбиране е caching_sha2_password, който не ви позволява да се свържете с mysql, като използвате първоначалното влизане по подразбиране в php. Повечето потребители ще получат съобщение за грешка “Connection failed: The server requested authentication method unknown to the client”. Сървърът е поискал метод за удостоверяване, неизвестен на клиента“ . За да го активираме обратно към естествения, трябва да зададем парола за root с mysql_native_password.
mysql -u root ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES;
notepad C:\nginx\php\php.ini ### Потърсете и променете: extension=C:\nginx\php\ext\php_mysqli.dll extension=C:\nginx\php\ext\php_curl.dll extension=C:\nginx\php\ext\php_pdo_mysql.dll extension=C:\nginx\php\ext\php_mbstring.dll extension=C:\nginx\php\ext\php_gd.dll extension=C:\nginx\php\ext\hp_soap.dll
Внимание !!! Това са само примери. В зависимост какво ползвате слагайте тези разширения които Ви трябват. Няма смисъл да слагате всичко. По-надолу ще покажа кои са необходими за работата на PHPMyAdmin.
Накрая поправяме скриптовете за пускане/спиране/рестартиране на WEB сървъра.
notepad c:\nginx\start.bat ### Стартиращ скрипт @ECHO OFF ECHO Starting PHP FastCGI... C:\nginx\RunHiddenConsole.exe C:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 ECHO Starting NGINX start C:\nginx\nginx.exe ECHO Starting MySQL... C:\nginx\RunHiddenConsole.exe C:\nginx\mysql\bin\mysqld --console tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" tasklist /fi "imagename eq mysqld.exe" popd EXIT /b ### Стопиращ скрипт @ECHO OFF taskkill /f /IM nginx.exe taskkill /f /IM php-cgi.exe taskkill /f /IM mysqld.exe tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" tasklist /fi "imagename eq mysqld.exe" popd EXIT /b ### Скрипт за Restart и наблюдение @ECHO ON taskkill /f /IM nginx.exe taskkill /f /IM php-cgi.exe taskkill /f /IM mysqld.exe ECHO Starting PHP FastCGI... C:\nginx\RunHiddenConsole.exe C:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 ECHO Starting NGINX start C:\nginx\nginx.exe ECHO Starting MySQL... C:\nginx\RunHiddenConsole.exe C:\nginx\mysql\bin\mysqld --console tasklist /fi "imagename eq nginx.exe" tasklist /fi "imagename eq php-cgi.exe" tasklist /fi "imagename eq mysqld.exe" pause
За начало да смъкнем PHPMyAdmin от: https://www.phpmyadmin.net/downloads/. Разархивираме пакета и го слягаме в D:/Clouds/OneDrive/WWW/tlan.local/. Трябва да се получи D:/Clouds/OneDrive/WWW/tlan.local/phpMyAdmin
Някои extended features липсват за да работи правилно. По-нагоре обясних, че са необходими някои extensions за да работи правилно phpMyAdmin. Да оправим този проблем
notepad C:\nginx\php\php.ini ;extension_dir = "ext" extension_dir = "ext" ;extension=mysql extension=mysql
Отново пробваме на http://tlan.local/phpmyadmin.
Първата задача е да създадем парола за root в MySQL.
C:\nginx\mysql\bin\\\mysql_secure_installation.exe Securing the MySQL server deployment. Enter password for user root: ********** The 'validate_password' component is installed on the server. The subsequent steps will run with the existing configuration of the component. Using existing password for root. Estimated strength of the password: 50 Change the password for root ? ((Press y|Y for Yes, any other key for No) : N ... skipping. 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? (Press y|Y for Yes, any other key for No) : Yes 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? (Press y|Y for Yes, any other key for No) : Yes 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? (Press y|Y for Yes, any other key for No) : Yes - 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? (Press y|Y for Yes, any other key for No) : Yes Success. All done!
Рестартираме WEB сървъра и тестваме наново.
Виждаме, че неправилно е конфигуриран phpMyAdmin. Да оправим този проблем.
C:\nginx\mysql\bin\mysql.exe -u root -p Enter password: ********** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 9.2.0 MySQL Community Server - GPL Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like 'port'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3306 | +---------------+-------+ 1 row in set (0.02 sec) quit
MySQL "слуша" на порт 3306. Да редактираме конфигурационния файл на phpMyAdmin.
copy D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\config.sample.inc.php D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\config.inc.php
Пробваме да влезем като root.
Влизаме но с грешки. Липсва разширението mbstring и т.н. extension=php_mbstring.dll
notepad C:\nginx\php\php.ini ;extension=mbstring extension=mbstring
Рестартираме WEB сървъра и пробваме.
notepad D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\config.inc.php $cfg['blowfish_secret'] = 'KLS$vbc91Lkja$vc@opGbxA278EWopdc'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Рестартираме WEB сървъра и пробваме.
The $cfg['TempDir'] (D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\tmp\) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this. Грубо казано нямаме права върху папката D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\tmp\
notepad D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\config.inc.php * Directories for saving/loading files from server */ $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; $cfg['TempDir'] = '/tmp';
Проверяваме:
Всички критични грешки са изчистени. Да проверим какво още липсва:
Досадна грешка. Просто я игнорираме. Не е важна.
notepad D:\Clouds\OneDrive\WWW\tlan.local\phpMyAdmin\config.inc.php /* Storage database and tables */ // $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; // $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; // $cfg['Servers'][$i]['relation'] = 'pma__relation'; // $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; // $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; // $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; // $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; // $cfg['Servers'][$i]['history'] = 'pma__history'; // $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; // $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; // $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; // $cfg['Servers'][$i]['recent'] = 'pma__recent'; // $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; // $cfg['Servers'][$i]['users'] = 'pma__users'; // $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; // $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; // $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; // $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; // $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; // $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; $cfg['PmaNoRelation_DisableWarning'] = true;
Отново проверяваме:
Вече всичко е наред. Ако не бяхме я игнорирали става много сложно. Проблема се оправя но се влиза базите данни и там се коригира, след това се настройва конфигурационния файл на phpMyAdmin.
За разлика от Apache в Nginx няма генерирани сертификати. Ще трябва сами да си ги създадем. Ще ползваме OpenSSL.
winget --version v1.10.340 winget search openssl The `msstore` source requires that you view the following agreements before using. Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction The source requires the current machine's 2-letter geographic region to be sent to the backend service to function properly (ex. "US"). Do you agree to all the source agreements terms? [Y] Yes [N] No: Y Name Id Version Match Source ----------------------------------------------------------------------------- FireDaemon Lozenge FireDaemon.FireDaemonLozenge 3.0.2 Tag: openssl winget FireDaemon OpenSSL 3 FireDaemon.OpenSSL 3.4.1 Tag: openssl winget OpenSSL 3.4.1 ShiningLight.OpenSSL.Dev 3.4.1 winget OpenSSL Light 3.4.0 ShiningLight.OpenSSL.Light 3.4.1 winget winget install -e --id ShiningLight.OpenSSL dafdasdfasdfasdfasdfa
Още openssl не работи защото не е оправен пътя до него.
setx PATH "%PATH%;C:\Program Files\OpenSSL-Win64\bin" /M asdfasdfasdfasdfadf
Вече може да тестваме в PowerShell.
openssl version asdfasdfasdfad openssl req -newkey rsa:4096 -nodes -sha512 -x509 -days 3650 -nodes -out C:\nginx\ssl\certs\tlan-local.pem -keyout C:\nginx\ssl\private\tlan-local.key Country Name (2 letter code) [AU]: BG State or Province Name (full name) [Some-State]: Targovishte Locality Name (eg, city) []: Tar Organization Name (eg, company) [Internet Widgits Pty Ltd]: Navy Organizational Unit Name (eg, section) []: IT Common Name (e.g. server FQDN or YOUR name) []: home.tlan.net Email Address []: tachko@tlan.net
notepad C:\nginx\conf\nginx.conf worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name tachko.local; root "G:/GDisk/My Drive/WWW/tachko.local/"; error_log c:/nginx/logs/tachko.local.error.log; access_log c:/nginx/logs/tachko.local.access.log; location / { index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 443 ssl; server_name tlan.local; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/cert.key; location / { return 301 http://$http_host$request_uri; } } server { listen 80; server_name tlan.local; root D:/Clouds/OneDrive/WWW/tlan.local/; error_log c:/nginx/logs/tlan.local.error.log; access_log c:/nginx/logs/tlan.local.access.log; location / { index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }