Location root vs alias
http {
server {
listen 8081;
root /var/www/html/websites;
#with root no need to specify in url as location automatically append to root
location /sqr {
root /var/www/html/websites;
}
#with alias need to specify in url as location does not append to alias
location /test {
alias /var/www/html/websites/vegetables/;
try_files $uri veggies.html =404;
}
#with regex add try_files directive
location ~* /foo$ {
alias /var/www/html/websites/fruits/site;
try_files $uri $uri/index.html =404;
}
#with regex add try_files directive above will serve only till foo but below code will serve after foo also e.g. http://site.com/foo/abc.html
location ~* /foo {
alias /var/www/html/websites/fruits/site;
try_files $uri $uri/index.html =404;
}
}
}
events {}
nginx -s reload
Check using following url
http://yoursite/sqr
http://yoursite/test
http://yoursite/foo/
Redirect and Rewrite
#this will redirect to foo and also changes the URL
location /bar {
return 307 /foo;
}
#this will rewrite the url i.e. URL would not change URL will be fizz and content will load from foo
rewrite /fizz /foo;
Nginx as a Load Balancer
# Define an upstream block to group backend servers
upstream backend_servers {
# List of backend servers
server backend1.example.com:8080;
server backend2.example.com:8080;
server backend3.example.com:8080;
server backend4.example.com:8080;
}
server {
listen 80; # Listen on port 80
# Define the server name (domain or IP)
server_name www.example.com;
# Location block to define how requests should be handled
location / {
# Use the defined upstream group for proxying requests
proxy_pass http://backend_servers;
}
Run from terminal
while true; do curl -s http://www.example.com; sleep 1; done;
Example
you can run 2 servers locally using php -S or using docker containers by mapping 2 ports
http {
upstream backend_servers {
server localhost:1234;
server localhost:4567;
}
server {
listen 8081;
#root /var/www/html/websites;
location / {
proxy_pass http://backend_servers;
}
}
}
events {}
PHP FPM socket configuration
user www-data;
events {}
http {
root /var/www/samosa;
server {
access_log /var/log/nginx/samosa-access.log;
error_log /var/log/nginx/samosa-error.log;
error_page 404 /404.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
}
create project and verify with normal url
mkdir /var/www/html/myproject
vim index.html
<h1>Hello World</h1>
vim index.php
<?php
phpinfo();
![](https://codeinsightacademy.com/blog/http://codeinsightacademy.com/blog/wp-content/uploads/2021/07/image-1.png)
Create server block conf file
vim /etc/nginx/conf.d/myproject.conf
server {
listen 8082 default_server;
server_name _;
index index.php index.html;
root /var/www/html/myproject;
location ~ \.php$
{
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
Test nginx configuration
nginx -t
restart nginx
sudo service nginx restart
OR
sudo systemctl restart nginx
![](https://codeinsightacademy.com/blog/http://codeinsightacademy.com/blog/wp-content/uploads/2021/07/image-1024x404.png)
For Laravel Project
Specify path till public directory
![](https://codeinsightacademy.com/blog/http://codeinsightacademy.com/blog/wp-content/uploads/2021/07/image-2-1024x544.png)
Need to explore
worker process
log format
weight in upstream
upstream block ip:port down
nginx plus
directives – listen root index access_log error_log
access_log off;
error_log debug;
error_log warn;
$scheme variable
include /etc/nginx/mime.types;
nginx vs haproxy