Hur man installerar Linux, Nginx, MySQL, PHP (LEMP-stack) på Ubuntu
Introduktion
LEMP-programvarustacken levererar dynamiska webbsidor och webbapplikationer skrivna i PHP. Detta är en förkortning som beskriver ett Linux-operativsystem med en Nginx (uttalas som “Engine-X”) webserver. Backend-data lagras i MySQL-databasen och den dynamiska bearbetningen hanteras av PHP.
Denna guide visar hur man installerar en LEMP-stack på en Ubuntu-server. Ubuntu-operativsystemet tar hand om Linux-delen av stacken. Vi kommer att beskriva hur man får de övriga komponenterna att fungera.
Observera: Denna handledning riktar sig främst till Ubuntu 22.04 LTS med PHP 8.1. För användare av Ubuntu 24.04 LTS, justera PHP-versionreferenser från
php8.1-fpmtillphp8.3-fpmi alla kommandon. Se också till att uppdatera alla PHP-FPM-socketvägar i din Nginx-konfiguration (t.ex. använd/run/php/php8.3-fpm.sockför Ubuntu 24.04).
Hur man installerar Linux, Nginx, MySQL, PHP (LEMP-stack) på Ubuntu
- Installera Nginx-webbservern
- Installera MySQL
- Installera PHP
- Konfigurera Nginx för att använda PHP-processorn
- Testa PHP med Nginx
- Testa databasanslutning från PHP
Förutsättningar
Använd en icke-root sudo-användare på Ubuntu med UFW-brandväggen aktiverad. Följ vår guide för initial serverkonfiguration för Ubuntu för att ställa in detta.
Steg 1 – Installera Nginx-webbservern
För att visa webbsidor för webbplatsbesökare ska du använda Nginx, en högpresterande webbserver. Du kommer att använda APT-pakethanteraren för att hämta denna programvara.
Uppdatera serverns paketindex och installera sedan Nginx:
sudo apt updateDärefter kör apt install för att installera Nginx:
sudo apt install nginxNär du uppmanas, tryck på Y och ENTER för att bekräfta att du vill installera Nginx. När installationen är klar kommer Nginx-webbservern att vara aktiv och igång på din Ubuntu-server.
Verifiera att Nginx körs:
sudo systemctl status nginxDu bör se ett resultat som visar att Nginx är aktiv:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since...På Ubuntu är Nginx konfigurerat att starta automatiskt vid installationen.
Tillåt HTTP-trafik genom ufw-brandväggen. Nginx registrerar flera UFW-applikationsprofiler vid installation. Kontrollera tillgängliga profiler:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHAktivera den mest restriktiva profilen som tillåter nödvändig trafik. Eftersom SSL ännu inte är konfigurerat, tillåt endast HTTP-trafik på port 80:
Aktivera detta genom att köra följande:
sudo ufw allow 'Nginx HTTP'
Verifiera brandväggsändringen:
sudo ufw statusDetta resultat visar att HTTP-trafik nu är tillåten:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)För att testa Nginx-serverns domänfunktionalitet, navigera till http://your_domain med din föredragna webbläsare.
Om du inte har ett domännamn som pekar på din server och inte vet din servers offentliga IP-adress, kan du hitta den genom att köra någon av följande kommandon:
ip addr showhostname -IDetta kommer att skriva ut några IP-adresser. Du kan prova var och en av dem i din webbläsare i tur och ordning.
Som ett alternativ kan du kontrollera vilken IP-adress som är åtkomlig, sett från andra platser på internet:
curl -4 icanhazip.comSkriv in adressen som du får i din webbläsare så kommer den att ta dig till Nginx standardstartsida:
http://<server_domain_or_IP>Om du får den här sidan betyder det att du har installerat Nginx och aktiverat HTTP-trafik för din webbserver.
Steg 2 — Installera MySQL
Installera MySQL för att lagra och hantera webbplatsdata. MySQL är den standardiserade databashanteraren för PHP-miljöer.
Använd igen apt för att hämta och installera denna mjukvara:
sudo apt install mysql-serverNär du uppmanas, bekräfta installationen genom att trycka på Y och sedan ENTER.
Efter installation, kör säkerhetsskriptet för att ta bort osäkra standardinställningar och låsa databastillgången:
sudo mysql_secure_installationDu kommer att få en fråga om du vill konfigurera VALIDATE PASSWORD PLUGIN.
Observera: Att aktivera den här funktionen är något som kräver omdöme. Om den aktiveras kommer lösenord som inte uppfyller de angivna kriterierna att avvisas av MySQL med ett felmeddelande. Det är säkert att låta valideringen vara inaktiverad, men du bör alltid använda starka, unika lösenord för databasuppgifter.
Svara Y för ja, eller något annat för att fortsätta utan att aktivera:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Om du svarar ”ja” kommer du att bli ombedd att välja en nivå för lösenordsvalidering. Tänk på att om du anger 2 för den högsta nivån kommer du att få felmeddelanden när du försöker ställa in ett lösenord som inte innehåller siffror, stora och små bokstäver samt specialtecken:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1Oavsett om du väljer att ställa in VALIDATE PASSWORD PLUGIN eller inte, kommer din server att be dig att välja och bekräfta ett lösenord för MySQL-root-användaren. Detta ska inte förväxlas med systemroot. Databasroot-användaren är en administrativ användare med fullständiga behörigheter över databassystemet. Även om standardautentiseringsmetoden för MySQL-root-användaren inte kräver användning av lösenord, även när ett är inställt, bör du definiera ett starkt lösenord här som en extra säkerhetsåtgärd. Vi kommer att prata om detta om ett ögonblick.
Om du har aktiverat lösenordsvalidering kommer styrkan på det root-lösenord du angav att visas och din server kommer att fråga om du vill fortsätta med det lösenordet. Om du är nöjd med ditt nuvarande lösenord, tryck Y för "ja" vid prompten:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yFör resten av frågorna, tryck på Y och tryck på ENTER vid varje prompt. Detta kommer att ta bort vissa anonyma användare och testdatabasen, inaktivera fjärrinloggningar som root, och ladda dessa nya regler så att MySQL omedelbart respekterar de ändringar du har gjort.
När du är klar, testa om du kan logga in på MySQL-konsolen:
sudo mysqlDetta kommer att ansluta till MySQL-servern som den administrativa databasanvändaren root, vilket antyds av användningen av sudo när detta kommando körs. Du bör få följande utskrift:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, 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>För att avsluta MySQL-konsolen, skriv följande:
exitObservera att du inte behövde ange något lösenord för att ansluta som root-användare, även om du har definierat ett när du körde mysql_secure_installation-skriptet. Detta beror på att standardautentiseringsmetoden för den administrativa MySQL-användaren när MySQL är installerat på Ubuntu är auth_socket, istället för en metod som använder ett lösenord. Detta kan initialt verka som en säkerhetsrisk, men det gör databasservern mer säker eftersom de enda användarna som tillåts logga in som MySQL-root är systemanvändare med sudo-behörigheter som ansluter från konsolen eller genom en applikation som körs med samma behörigheter. I praktiken betyder det att du inte kommer kunna använda den administrativa databasens root-användare för att ansluta från din PHP-applikation.
För ökad säkerhet är det bäst att ha dedikerade användarkonton med begränsade behörigheter för varje databas, särskilt om du planerar att ha flera databaser värd på din server.
Obs: Vissa äldre versioner av det inbyggda MySQL PHP-biblioteket mysqlnd stödjer inte caching_sha2_authentication, som är standardmetoden för autentisering för skapade användare i MySQL 8. Av den anledningen kan du när du skapar databas-användare för PHP-applikationer på MySQL 8 behöva se till att de är konfigurerade för att använda mysql_native_password istället. Vi kommer att visa hur man gör detta i Steg 6.
Din MySQL-server är nu installerad och säkrad. Nästa steg är att installera PHP, den sista komponenten i LEMP-stacken.
Steg 3 – Installera PHP
Installera PHP för att bearbeta kod och generera dynamiskt innehåll. Nginx kräver ett externt program för PHP-bearbetning.
PHP-FPM ("fastCGI-processhanterare") hanterar PHP-bearbetning effektivt med ytterligare säkerhetsfunktioner och levererar bättre prestanda för PHP-baserade webbplatser. Installera php-fpm för att dirigera PHP-förfrågningar från Nginx, och php-mysql för att möjliggöra PHP-MySQL-kommunikation. Kärn-PHP-paket installeras automatiskt som beroenden.
För att installera paketen php8.1-fpm och php-mysql, kör:
sudo apt install php8.1-fpm php-mysqlNär du uppmanas, tryck på Y och ENTER för att bekräfta installationen.
Verifiera att PHP-FPM körs:
sudo systemctl status php8.1-fpmDu bör se en utskrift som visar att PHP-FPM är aktivt:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Du kan också kontrollera PHP-versionen:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurera Nginx för att använda dessa PHP-komponenter.
Steg 4 — Konfigurera Nginx för att använda PHP-processorn
Skapa Nginx serverblock (liknande Apache-virtuella värdar) för att kapsla in konfiguration och vara värd för flera domäner på en server. Denna guide använder din_domän som exempel på domännamn.
Info: För att lära dig mer om hur du ställer in ett domännamn med Linux-Console.net, läs vår introduktion till Linux-Console.net DNS.
På Ubuntu 22.04 aktiverar Nginx ett standardserverblock som serverar dokument från /var/www/html. För flera webbplatser, skapa en katalogstruktur inom /var/www för your_domain, och lämna /var/www/html som standard fallback-katalog.
Skapa rotwebbkatalogen för your_domain enligt följande:
sudo mkdir /var/www/your_domainNästa steg är att tilldela ägarskap av katalogen med miljövariabeln $USER, som kommer att referera till din nuvarande systemanvändare:
sudo chown -R $USER:$USER /var/www/your_domainÖppna sedan en ny konfigurationsfil i Nginx:s sites-available-katalog med din föredragna kommandoradsredigerare. Här kommer vi att använda nano:
sudo nano /etc/nginx/sites-available/your_domainDetta kommer att skapa en ny tom fil. Infoga följande grundläggande konfiguration:
server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Här är vad var och en av dessa direktiv och platsblock gör:
listen— Definierar vilken port Nginx kommer att lyssna på. I det här fallet kommer den att lyssna på port80, standardporten för HTTP.root— Definierar dokumentroten där filerna som serveras av denna webbplats lagras.index— Definierar i vilken ordning Nginx kommer att prioritera indexfiler för denna webbplats. Det är en vanlig praxis att listaindex.html-filer med högre prioritet änindex.php-filer för att snabbt kunna sätta upp en underhållssida i PHP-applikationer. Du kan justera dessa inställningar för att bättre passa dina applikationsbehov.server_name— Definierar vilka domännamn och/eller IP-adresser denna serverblock ska svara på. Pekar denna direktiv till din servers domännamn eller offentliga IP-adress.location /— Den första location-blocket innehåller entry_files-direktiv, som kontrollerar om filer eller kataloger som matchar en URL-förfrågan finns. Om Nginx inte kan hitta resurserna kommer det att returnera ett 404-fel.location ~ \.php$— Denna platsblock hanterar den faktiska PHP-bearbetningen genom att peka Nginx tillfastcgi-php.conf-konfigurationsfilen och filenphp8.1-fpm.sock, som anger vilken socket som är kopplad tillphp8.1-fpm.location ~ /\.ht— Den sista location-blocket hanterar.htaccess-filer, som Nginx inte bearbetar. Genom att lägga till direktivetdeny all, om några.htaccess-filer skulle råka hamna i dokumentroten, kommer de inte att serveras till besökare.
När du är klar med redigeringen, spara och stäng filen. Om du använder nano kan du göra detta genom att trycka CTRL+X och sedan Y och ENTER för att bekräfta.
Aktivera din konfiguration genom att länka till konfigurationsfilen från Nginx:s sites-enabled-katalog:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Därefter, koppla loss standardkonfigurationsfilen från /sites-enabled/-mappen:
sudo unlink /etc/nginx/sites-enabled/defaultObservera: Om du någonsin behöver återställa standardkonfigurationen kan du göra det genom att återskapa den symboliska länken, som följande:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Detta kommer att tala om för Nginx att använda konfigurationen nästa gång den laddas om. Du kan testa din konfiguration för syntaxfel genom att köra följande:
sudo nginx -tOm några fel rapporteras, gå tillbaka till din konfigurationsfil för att granska dess innehåll innan du fortsätter.
När du är redo, ladda om Nginx för att tillämpa ändringarna:
sudo systemctl reload nginxDin nya webbplats är nu aktiv, men webbrot /var/www/your_domain är fortfarande tom. Skapa en index.html-fil på den platsen så att du kan testa att din nya serverblock fungerar som förväntat:
nano /var/www/your_domain/index.htmlInkludera följande innehåll i den här filen:
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>Gå nu till din webbläsare och öppna din servers domännamn eller IP-adress, som anges i server_name-direktivet i din serverblockskonfigurationsfil:
http://server_domain_or_IPDu kommer att få en sida som liknar följande:
Om du får denna sida betyder det att din Nginx-serverblock fungerar som förväntat.
Du kan lämna denna fil som den är som en temporär startsida för din applikation tills du skapar en index.php-fil för att ersätta den.
Varning: Efter att du har lagt till din index.php-fil, se till att ta bort eller byta namn på index.html-filen från ditt dokumentrot. Om båda filerna finns, kommer Nginx som standard att visa index.html och din PHP-sida kommer inte att visas — detta är en vanlig källa till förvirring för nya användare.
Din LEMP-stack är nu helt konfigurerad. I nästa steg kommer du att skapa ett PHP-skript för att testa att Nginx faktiskt kan hantera .php-filer på din nyskapade webbplats.
Steg 5 – Testa PHP med Nginx
Din LEMP-stack bör nu vara helt uppsatt. Du kan testa den för att verifiera att Nginx korrekt kan överlämna .php-filer till din PHP-processor.
Du kan göra detta genom att skapa en test-PHP-fil i din dokumentrot. Öppna en ny fil kallad info.php i din dokumentrot i din föredragna textredigerare:
nano /var/www/your_domain/info.phpLägg till följande rader i den nya filen. Detta är giltig PHP-kod som kommer att returnera information om din server:
<?php
phpinfo();När du är klar, spara och stäng filen.
Du kan nu komma åt den här sidan i din webbläsare genom att besöka domännamnet eller den offentliga IP-adressen som du har ställt in i din Nginx-konfigurationsfil, följt av /info.php:
http://server_domain_or_IP/info.phpDu kommer att få en webbsida med detaljerad information om din server:
Efter att ha kontrollerat relevant information om din PHP-server via den sidan är det bäst att ta bort filen du skapade eftersom den innehåller känslig information om din PHP-miljö och din Ubuntu-server. Du kan använda rm för att ta bort filen:
sudo rm /var/www/your_domain/info.phpDu kan alltid återskapa den här filen om du behöver den senare.
Steg 6 — Testa databasanslutning från PHP (Valfritt)
Om du vill testa om PHP kan ansluta till MySQL och utföra databasfrågor kan du skapa en testtabell med exempeldata och fråga efter dess innehåll från ett PHP-skript. Innan du gör det måste du skapa en testdatabas och en ny MySQL-användare som är korrekt konfigurerad för att få åtkomst till den.
Observera: Vissa äldre versioner av det inbyggda MySQL PHP-biblioteket mysqlnd stödjer inte caching_sha2_authentication, standardautentiseringsmetoden för MySQL 8. Du kan behöva se till att de är konfigurerade att använda mysql_native_password istället.
Vi kommer att skapa en databas som heter example_database och en användare som heter example_user, men du kan ersätta dessa namn med andra värden.
Först, anslut till MySQL-konsolen med root-kontot:
sudo mysqlFör att skapa en ny databas, kör följande kommando från din MySQL-konsol:
CREATE DATABASE example_database;Nu kan du skapa en ny användare och ge dem fullständiga privilegier på den anpassade databasen du har skapat.
Följande kommando skapar en ny användare med namnet example_user, med mysql_native_password som standard autentiseringsmetod. Vi anger detta användarlösenord som password, men du bör ersätta detta värde med ett säkert lösenord som du själv väljer.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Nu behöver vi ge den här användaren behörighet över databasen example_database:
GRANT ALL ON example_database.* TO 'example_user'@'%';Detta kommer att ge användaren example_user fulla behörigheter över databasen example_database samtidigt som det förhindrar att denna användare skapar eller ändrar andra databaser på din server.
Avsluta nu MySQL-skalet med följande kommando:
exitDu kan testa om den nya användaren har rätt behörigheter genom att logga in på MySQL-konsolen igen, den här gången med de anpassade användaruppgifterna. Observera -p-flaggan i detta kommando, som kommer att be dig om lösenordet som användes när example_user-användaren skapades:
mysql -u example_user -pEfter att du loggat in på MySQL-konsolen, bekräfta att du har åtkomst till databasen example_database:
SHOW DATABASES;Detta kommer att ge följande resultat:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Nästa steg är att skapa en testtabell som heter todo_list. Från MySQL-konsolen, kör följande kommando:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Infoga några rader med innehåll i testtabellen. Du kanske vill upprepa nästa kommando några gånger och använda olika värden:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");För att bekräfta att uppgifterna sparades korrekt i din tabell, kör:
SELECT * FROM example_database.todo_list;Din utmatning ska visas som följer:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)Efter att ha bekräftat att du har giltiga data i din testtabell kan du avsluta MySQL-konsolen:
exitNu kan du skapa PHP-skriptet som kommer att ansluta till MySQL och söka efter ditt innehåll. Skapa en ny PHP-fil i din anpassade webbrotkatalog med din föredragna redigerare. Vi kommer att använda nano för det:
nano /var/www/your_domain/todo_list.phpFöljande PHP-skript ansluter till MySQL-databasen och frågar efter innehållet i tabellen todo_list, och visar resultaten i en lista. Om det uppstår ett problem med databasanslutningen kommer det att kasta ett undantag.
Lägg till följande innehåll i ditt todo_list.php-skript:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Spara och stäng filen när du är klar med redigeringen.
Du kan nu få åtkomst till den här sidan i din webbläsare genom att besöka domännamnet eller den offentliga IP-adressen som är konfigurerad för din webbplats, följt av /todo_list.php:
http://server_domain_or_IP/todo_list.phpDu bör få en sida som liknar följande, som visar innehållet du har lagt in i din testtabell:
Det betyder att din PHP-miljö är redo att ansluta till och interagera med din MySQL-server.
Vanliga frågor
Vad används LEMP-stacken till?
LEMP-stacken hostar dynamiska PHP-baserade webbplatser och applikationer inklusive WordPress, Laravel, Magento, Drupal och egna PHP-projekt. Den är särskilt effektiv för webbplatser med hög trafik som kräver effektiv hantering av samtidiga anslutningar.
Vad är skillnaden mellan LEMP- och LAMP-staplar?
LEMP använder Nginx, som hanterar anslutningar asynkront med en händelsestyrd arkitektur—effektivt för samtidiga användare. LAMP använder Apache, som traditionellt skapar en tråd per förfrågan (även om modern Apache stödjer händelsestyrda lägen). LEMP ger generellt bättre prestanda för statiskt innehåll och scenarier med hög samtidig belastning, medan LAMP erbjuder enklare .htaccess-konfiguration och bredare modulsupport.
Vilken Ubuntu-version bör jag använda för LEMP?
Ubuntu 22.04 LTS är huvudmålet för denna guide och har PHP 8.1, MySQL 8.0 och Nginx med långtidsstöd. Ubuntu 24.04 LTS (senaste versionen) inkluderar PHP 8.3 som standard och fungerar med denna guide genom att justera PHP-FPM-sockelvägar och versionsnummer därefter.
Hur installerar jag LEMP-stacken på Ubuntu 24.04?
Följ dessa grundläggande steg:
- Installera Nginx:
sudo apt install nginx - Installera MySQL:
sudo apt install mysql-server - Kör MySQL-säkerhetsskript:
sudo mysql_secure_installation - Installera PHP-FPM:
sudo apt install php-fpm php-mysql - Konfigurera Nginx-serverblock med PHP-FPM-integration
- Testa med
info.phpoch databasanslutning
Se hela genomgången i steg 1–6 ovan.
Vilken version av PHP bör jag installera med Nginx och MySQL?
Använd din Ubuntus standard-PHP för bästa kompatibilitet:
- Ubuntu 22.04: PHP 8.1 (installerat via
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (justera kommandon till
php8.3-fpmför denna version)
Båda versionerna fungerar utmärkt med Nginx och MySQL 8.0, stödjer moderna ramverk och får aktiva säkerhetsuppdateringar.
Hur konfigurerar jag Nginx för att hantera PHP-filer?
Lägg till ett location ~ \.php$-block i din Nginx-serverkonfiguration som dirigerar PHP-förfrågningar till PHP-FPM via Unix-socket:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Justera sockelvägen baserat på din PHP-version, testa med sudo nginx -t, och ladda om med sudo systemctl reload nginx.
Varför får jag ett "502 Bad Gateway"-fel efter att ha installerat PHP-FPM?
502-fel indikerar att Nginx inte kan kommunicera med PHP-FPM. Vanliga orsaker:
- PHP-FPM körs inte: Kontrollera med
sudo systemctl status php8.1-fpmoch starta om det vid behov - Fel på sockelväg: Kontrollera att
/run/php/php8.1-fpm.sockfinns och stämmer överens med din Nginx-konfiguration - Behörighetsproblem: Se till att Nginx-användaren (www-data) kan komma åt sockeln
- PHP-FPM konfigurationsfel: Kontrollera loggar på
/var/log/php8.1-fpm.log
Lösning: Starta om båda tjänsterna:
sudo systemctl restart php8.1-fpm nginxHur säkrar jag MySQL efter installationen?
Kör det inbyggda säkerhetsskriptet:
sudo mysql_secure_installationFölj anvisningarna för att:
- Aktivera lösenordsvalideringsplugin
- Sätt ett starkt root-lösenord
- Ta bort anonyma användare
- Inaktivera fjärrinloggning som root
- Ta bort testdatabasen
- Ladda om privilegier
För applikationsdatabaser, skapa dedikerade användare med begränsade rättigheter istället för att använda root-kontot.
Kan jag köra flera webbplatser på en LEMP-server?
Ja, skapa separata Nginx-serverblock för varje domän:
- Skapa katalog:
sudo mkdir -p /var/www/second_domain - Skapa serverblock:
sudo nano /etc/nginx/sites-available/second_domain - Konfigurera med unika
server_nameochroot-direktiv - Aktivera:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Testa och ladda om:
sudo nginx -t && sudo systemctl reload nginx
Varje webbplats kan ha separata PHP-inställningar och databasanvändare.
Hur uppgraderar jag PHP till en nyare version?
Ubuntu-paketuppgraderingar hanterar mindre versioner automatiskt. För uppgraderingar av större versioner:
Lägg till Ondřejs PHP PPA (pålitligt tredjepartsförråd):
sudo add-apt-repository ppa:ondrej/php sudo apt updateInstallera ny PHP-FPM-version:
sudo apt install php8.3-fpm php8.3-mysql -yUppdatera Nginx-konfigurationens socketväg till
/run/php/php8.3-fpm.sockTesta och ladda om Nginx
Ta bort eventuellt gammal version:
sudo apt purge php8.1-fpm
Testa alltid i staging innan du uppgraderar produktionssystemen.
Felsökning av vanliga problem
502 Fel på gateway
Det vanligaste problemet med LEMP-stacken uppstår när Nginx inte kan kommunicera med PHP-FPM:
Kontrollera PHP-FPM-status:
sudo systemctl status php8.1-fpmVerifiera sokelväg:
ls -la /run/php/Den förväntade utmatningen bör visa filen php8.1-fpm.sock.
Vanliga åtgärder:
- Starta om PHP-FPM:
sudo systemctl restart php8.1-fpm - Kontrollera att Nginx serverblockets socket-väg stämmer överens med den faktiska PHP-FPM-socketen
- Verifiera filbehörigheter:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Tillstånd nekade-fel
Fixa webbkatalogens behörigheter:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainMySQL-anslutningsproblem
Återställ MySQL root-lösenord:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Kontrollera MySQL-tjänsten:
sudo systemctl status mysqlPHP bearbetas inte
Verifiera PHP-moduler:
php -m | grep -E 'mysql|fpm'Kontrollera PHP-FPM-konfiguration:
sudo nginx -t
sudo php-fpm8.1 -tFelsök 404-fel:
- Verifiera att
index.phpfinns med i Nginxindex-direktiv - Kontrollera om filen finns:
ls -la /var/www/your_domain/ - Granska Nginx-felloggar:
sudo tail -f /var/log/nginx/error.log
Slutsats
I den här guiden byggde du en flexibel grund för att leverera PHP-webbplatser och applikationer till dina besökare, med Nginx som webbserver och MySQL som databassystem. Du kan även göra detta med en Apache-webbserver, kolla in vår handledning om hur man installerar Linux, Apache, MySQL, PHP (LAMP) på Ubuntu. Du kan också säkra din webbplats med Let’s Encrypt, som erbjuder gratis, betrodda certifikat. Lär dig hur du gör detta med vår guide om Let’s Encrypt för Apache.
Tack för att du lär dig tillsammans med Linux-Console.net-communityn.



