git add .
git commit -m 'msg'
#to verify origin
git config -l
#if you are not able to see url and fetch then run git remote add origin
#remote.heroku.url=https://git.heroku.com/project.git
#remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*
#git remote add origin heroku_git_url
#git push origin master
git push heroku master
Once app is deployed it will show you an url which you can access publicly from internet.
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();
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
For Laravel Project Specify path till public directory
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