# Amazon Linux 2023 वर LEMP stack

Source: https://ravindrabagale.com/mr/cyber/part-04/ch09-php-lamp-and-lemp-step-by-step/9-5-lemp-on-amazon-linux-2023.html
Language: mr (Marathi with English technical terms)

LEMP मध्ये Apache ऐवजी Nginx वापरतो. Static files Nginx देतो; PHP requests FastCGI मधून PHP-FPM कडे जातात आणि PHP गरजेनुसार database वापरतो.

                        +------------------ EC2 (Linux) -------------------+
  Browser ──HTTP:80──►  |  Nginx ──FastCGI (unix socket)──► PHP-FPM        |
                        |    static files served directly      │           |
                        |                                      ▼           |
                        |                            MySQL/MariaDB :3306   |
                        +--------------------------------------------------+

Install आणि test

sudo yum install -y nginx php php-fpm php-mysqlnd php-gd php-mbstring php-xml mariadb105-server
sudo service nginx start
sudo service php-fpm start
sudo service mariadb start
sudo systemctl enable nginx php-fpm mariadb
sudo mysql_secure_installation
echo "<?php phpinfo();" | sudo tee /usr/share/nginx/html/info.php
curl -s http://localhost/info.php | grep -m1 "PHP Version"

Default Nginx PHP include/package config लागू आहे का पाहा. phpinfo test मध्ये विस्तृत configuration दिसते; test झाल्यावर /usr/share/nginx/html/info.php काढा. Current active root वेगळा असल्यास योग्य path/Host तपासा.

स्वतःचा PHP server block

sudo mkdir -p /var/www/phpapp
sudo tee /etc/nginx/conf.d/phpapp.conf > /dev/null <<'EOF'
server {
    listen 80;
    server_name YOUR_SERVER_NAME;
    root /var/www/phpapp;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
EOF
sudo sed -i "s/YOUR_SERVER_NAME/$(curl -s https://checkip.amazonaws.com)/" /etc/nginx/conf.d/phpapp.conf
sudo nginx -t && sudo service nginx reload

Root /var/www/phpapp आणि index.php पहिली index choice आहे. Normal route file/directory नसल्यास index.php ला query args सह जाते. PHP location मध्ये try_files $uri =404 file अस्तित्व तपासतो. fastcgi_pass FPM socket आणि SCRIPT_FILENAME execute करायचा file path देतात.

Source sed command बाहेरून दिसणारा IP server_name मध्ये भरते. NAT/proxy/वेगळा endpoint असल्यास actual domain/public Host manually जुळवा. PHP app फाइल पुढच्या lesson प्रमाणे तयार करा.

Security मध्ये उपयोग

नसलेल्या .php paths FPM कडे पाठवू नयेत म्हणून try_files check उपयोगी. तरी upload directory मध्ये PHP execution बंद करणं, योग्य handler/path configuration आणि safe uploads स्वतंत्रपणे आवश्यक आहेत. एक directive म्हणजे सर्व upload attacks बंद नाहीत.

Lab

Amazon Linux LEMP तयार करा. phpapp block enable करून /var/www/phpapp मधली PHP test page योग्य Host वर execute होते का पाहा; test file नंतर काढा.

रवींद्र बागले यांची tip

phpinfo page कायम ठेवू नका. त्यात version, paths, modules आणि configuration दिसते. Test संपल्यावर फक्त तयार केलेली info.php delete करून public URL आता unavailable आहे का तपासा.
