How to configure Nginx + PHP correctly
This article mainly introduces the steps of configuring Nginx PHP in detail, and understands the simple tutorial of Nginx PHP configuration. Interested friends can refer to it
For many people, configuring Nginx PHP It's nothing more than searching for a tutorial and then copying and pasting it. It sounds like there is nothing wrong with it, but in fact, a lot of information on the Internet is in disrepair and full of loopholes. If you just copy and paste without asking for a deeper understanding, you will pay the price sooner or later.
Suppose we use PHP to implement a front-end controller, or to put it bluntly, it is a unified entrance: send all PHP requests to the same file, and then in this file Routing is implemented by parsing "REQUEST_URI".
Generally configure it like this
At this time many tutorials will teach you to configure Nginx PHP like this:
##
server { listen 80; server_name foo.com; root /path; location / { index index.html index.htm index.php; if (!-e $request_filename) { rewrite . /index.php last; } } location ~ /.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } }
We need to first understand the inheritance relationship of the instructions in the Nginx configuration file:
The Nginx configuration file is divided into many blocks. The common ones from outside to inside are "http", "server", "location", etc. , the default inheritance relationship is from outside to inside, which means that the inner block will automatically obtain the value of the outer block as the default value.
Let's start with the "index" directive In the problem configuration it is defined in "location":
location / { index index.html index.htm index.php; }
Let’s take a look at the “if” command It is no exaggeration to say that it is the most misunderstood Nginx command:
if (!-e $request_filename) { rewrite . /index.php last; }
try_files $uri $uri/ /index.php;
In addition, beginners often think that the "if" instruction is a kernel-level instruction, but in fact it is part of the rewrite module, and the Nginx configuration is actually declarative. , not procedural, so when it is mixed with instructions from non-rewrite modules, the results may not be what you want.
Let’s take a look at the "fastcgi_params" configuration file
include fastcgi_params;
Nginx has two fastcgi configuration files, namely "fastcgi_params" " and "fastcgi.conf", there is not much difference between them. The only difference is that the latter has one more line of definition of "SCRIPT_FILENAME" than the former:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Note: There is no / between $document_root and $fastcgi_script_name. Originally, Nginx only had "fastcgi_params". Later, it was discovered that many people used hard-coding when defining "SCRIPT_FILENAME", so "fastcgi.conf" was introduced to standardize usage.
But this raises a question: Why must we introduce a new configuration file instead of modifying the old configuration file? This is because the "fastcgi_param" instruction is an array type. The same as the ordinary instruction: the inner layer replaces the outer layer. The difference from the ordinary instruction is that when used multiple times at the same level, it is added instead of replaced. In other words, if "SCRIPT_FILENAME" is defined twice at the same level, they will both be sent to the backend, which may cause some potential problems. In order to avoid such situations, a new configuration file was introduced.
In addition, we also need to consider a security issue: when PHP turns on "cgi.fix_pathinfo", PHP may parse the wrong file type as a PHP file. If Nginx and PHP are installed on the same server, the simplest solution is to use the "try_files" command to filter:
try_files $uri =404;
Improved version Based on the previous analysis, here is an improved version. Is it much cleaner than the original version?
server { listen 80; server_name foo.com; root /path; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ /.php$ { try_files $uri =404; include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } }
##
The above is the detailed content of How to configure Nginx + PHP correctly. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP is used to build dynamic websites, and its core functions include: 1. Generate dynamic content and generate web pages in real time by connecting with the database; 2. Process user interaction and form submissions, verify inputs and respond to operations; 3. Manage sessions and user authentication to provide a personalized experience; 4. Optimize performance and follow best practices to improve website efficiency and security.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

The core benefits of PHP include ease of learning, strong web development support, rich libraries and frameworks, high performance and scalability, cross-platform compatibility, and cost-effectiveness. 1) Easy to learn and use, suitable for beginners; 2) Good integration with web servers and supports multiple databases; 3) Have powerful frameworks such as Laravel; 4) High performance can be achieved through optimization; 5) Support multiple operating systems; 6) Open source to reduce development costs.

PHP uses MySQLi and PDO extensions to interact in database operations and server-side logic processing, and processes server-side logic through functions such as session management. 1) Use MySQLi or PDO to connect to the database and execute SQL queries. 2) Handle HTTP requests and user status through session management and other functions. 3) Use transactions to ensure the atomicity of database operations. 4) Prevent SQL injection, use exception handling and closing connections for debugging. 5) Optimize performance through indexing and cache, write highly readable code and perform error handling.

How to configure Nginx in Windows? Install Nginx and create a virtual host configuration. Modify the main configuration file and include the virtual host configuration. Start or reload Nginx. Test the configuration and view the website. Selectively enable SSL and configure SSL certificates. Selectively set the firewall to allow port 80 and 443 traffic.

You can query the Docker container name by following the steps: List all containers (docker ps). Filter the container list (using the grep command). Gets the container name (located in the "NAMES" column).
