【DevOps】Nginx配置文件详解与实战部署PHP站点

目录

引言

Nginx配置文件概述

基本结构

关键指令

Nginx配置文件实战

全局指令配置

HTTP指令配置

服务器指令配置

位置指令配置

实战部署PHP站点

步骤1:安装Nginx和PHP

步骤2:创建网站目录和文件

步骤3:配置Nginx服务器块

步骤4:启用配置并测试

步骤5:配置DNS

步骤6:测试网站

结语


引言

在Web开发的世界里,Nginx以其高性能、低内存占用和稳定性而闻名。它不仅是一个优秀的HTTP和反向代理服务器,也是一个功能强大的邮件代理服务器。在本文中,我们将深入探讨Nginx配置文件的结构和关键指令,并通过实战演练,部署一个基于PHP的网站。

Nginx配置文件概述

Nginx的配置文件通常位于/etc/nginx/nginx.conf,但也可以通过命令行参数指定不同的配置文件。配置文件由指令和指令块组成,指令块可以嵌套,形成一个层次结构。每个指令块定义了一个特定的上下文,比如事件(events)、HTTP(http)、服务器(server)和位置(location)。

基本结构

一个典型的Nginx配置文件包括以下几个部分:

  • 全局指令(main):配置影响Nginx全局的指令,如用户(user)、pid(pid)、日志级别(log level)和工作进程数(worker_processes)。
  • 事件指令(events):配置与客户端连接处理相关的指令,如工作进程可以打开的连接数(worker_connections)。
  • HTTP指令(http):配置HTTP服务器和虚拟主机的指令,通常包含一个或多个server块。
  • 服务器指令(server):定义虚拟主机的配置,可以包含多个location块。
  • 位置指令(location):处理特定URL模式的配置。

关键指令

  • user:定义Nginx运行的用户和用户组。
  • worker_processes:设置Nginx工作进程的数量。
  • pid:指定Nginx进程ID文件的路径。
  • events:包含与事件处理相关的指令,如worker_connections
  • http:包含与HTTP服务器相关的指令,如server块。
  • server:定义虚拟主机,可以包含listenserver_nameroot等指令。
  • location:处理特定URL模式的指令块。

Nginx配置文件实战

全局指令配置

user www-data;
worker_processes auto;
pid /run/nginx.pid;error_log /var/log/nginx/error.log;
events {worker_connections 1024;
}

下面是对每一行的详细解析:

  • user www-data;

    • 这行配置指定了Nginx工作进程运行的用户和用户组。在这个例子中,Nginx将会以www-data用户身份运行。这个用户通常是专为Web服务器进程创建的,它拥有访问服务器上Web内容所需的最小权限。
  • worker_processes auto;

    • 这行配置设置了Nginx工作进程的数量。auto关键字表示Nginx将根据服务器的CPU核心数自动决定工作进程的数量。通常,每个CPU核心对应一个工作进程,但这个值可以根据实际的服务器负载和资源进行调整。
  • pid /run/nginx.pid;

    • 这行配置指定了Nginx主进程ID(PID)文件的存放路径。PID文件包含了Nginx主进程的进程ID,这对于管理Nginx进程非常重要,比如在重启或停止Nginx时需要用到这个PID。
  • error_log /var/log/nginx/error.log;

    • 这行配置设置了Nginx错误日志文件的路径。Nginx会将运行过程中遇到的错误信息记录到这个文件中,便于管理和调试。
  • events { ... }

    • 这是一个配置块,用于定义与客户端连接处理相关的配置。在这个块内部,可以设置各种与事件驱动模型相关的参数。
  • worker_connections 1024;

    • 这行配置位于events块内部,它设置了每个工作进程可以同时打开的最大连接数。在这个例子中,每个工作进程可以处理多达1024个并发连接。这个值应该根据服务器的硬件能力和预期负载进行调整。

HTTP指令配置

http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

下面是对每一行配置的详细解析:

  • include /etc/nginx/mime.types;

    • 这行配置告诉Nginx包含一个外部文件/etc/nginx/mime.types,这个文件通常包含了各种文件扩展名与MIME类型的映射关系。这样Nginx就知道如何为不同的文件类型设置正确的MIME类型。
  • default_type application/octet-stream;

    • 这行配置设置了默认的MIME类型。当Nginx无法根据请求的文件扩展名找到相应的MIME类型时,就会使用这个默认类型。application/octet-stream通常表示一个二进制数据流。
  • log_format main ...

    • 这是一个日志格式的定义,名为main。它定义了访问日志的格式,包括客户端地址($remote_addr)、用户($remote_user)、本地时间($time_local)、请求($request)、HTTP状态码($status)、发送的字节数($body_bytes_sent)、引用页面($http_referer)、用户代理($http_user_agent)和通过代理服务器的客户端地址($http_x_forwarded_for)。
  • access_log /var/log/nginx/access.log main;

    • 这行配置设置了访问日志文件的路径和使用的日志格式。在这个例子中,访问日志将被写入/var/log/nginx/access.log文件,并且使用上面定义的main日志格式。
  • sendfile on;

    • 这行配置开启了sendfile支持。sendfile是一个操作系统调用,它允许Nginx将文件直接从磁盘传输到TCP socket,而不需要先将数据读取到用户空间,这样可以提高文件传输的效率。
  • #tcp_nopush on;

    • 这行配置被注释掉了(#表示注释),如果启用,它会告诉Nginx在发送响应时使用TCP_CORK或TCP_NOPUSH选项,这可以减少小数据包的数量,从而减少网络拥塞和提高传输效率。
  • keepalive_timeout 65;

    • 这行配置设置了keep-alive超时时间,即在关闭连接之前,连接可以保持空闲的时间。在这个例子中,超时时间被设置为65秒。
  • #gzip on;

    • 这行配置也被注释掉了,如果启用,它会告诉Nginx对响应进行gzip压缩,这可以减少传输的数据量,加快页面加载速度。
  • include /etc/nginx/conf.d/*.conf;

    • 这行配置告诉Nginx包含/etc/nginx/conf.d/目录下的所有.conf文件。这通常用于加载额外的配置文件,比如虚拟主机配置或者其他模块的配置。

这个http块是Nginx配置的核心部分,它定义了HTTP服务器的基本行为和性能参数。通过这些配置,可以对Nginx进行精细的调整,以适应不同的应用场景和性能需求。

服务器指令配置

server {listen       80;server_name  example.com;access_log  /var/log/nginx/example.com.access.log;error_log   /var/log/nginx/example.com.error.log;root /var/www/example.com;location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;}
}

在这个Nginx配置文件的server块中,定义了一个虚拟主机的配置。下面是对每一行配置的详细解析:

  • listen 80;

    • 这行配置指定了这个虚拟主机监听的端口,在这个例子中是HTTP的标准端口80。
  • server_name example.com;

    • 这行配置设置了虚拟主机的服务器名称,即这个配置块将用于处理发往example.com的HTTP请求。
  • access_log /var/log/nginx/example.com.access.log;

    • 这行配置设置了访问日志文件的路径。所有发往example.com的请求都会被记录在这个日志文件中。
  • error_log /var/log/nginx/example.com.error.log;

    • 这行配置设置了错误日志文件的路径。所有与example.com相关的错误都会被记录在这个日志文件中。
  • root /var/www/example.com;

    • 这行配置设置了网站的根目录,即当Nginx处理发往example.com的请求时,会从这个目录下查找资源。
  • location / { ... }

    • 这是一个location块,用于匹配所有以斜杠/开始的请求。在这个块内部,可以设置特定于这些请求的处理方式。
  • try_files $uri $uri/ /index.php$is_args$args;

    • 这行配置是try_files指令,它按照指定的顺序尝试处理请求。首先尝试请求的URI($uri),如果URI是一个目录,则尝试在目录下查找index.php文件($uri/),如果都没有找到,则将请求转发到/index.php,同时保留请求的参数($is_args$args)。
  • location ~ \.php$ { ... }

    • 这是一个正则表达式location块,用于匹配所有以.php结尾的请求。
  • include snippets/fastcgi-php.conf;

    • 这行配置告诉Nginx包含一个外部文件snippets/fastcgi-php.conf,这个文件通常包含了用于处理PHP请求的FastCGI参数。
  • fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

    • 这行配置设置了FastCGI传递的地址,在这个例子中,请求将被传递到通过Unix套接字/var/run/php/php7.4-fpm.sock运行的PHP-FPM进程。

这个server块是Nginx配置中用于定义虚拟主机行为的部分,它指定了如何处理发往特定域名的HTTP请求,包括日志记录、网站根目录设置以及对不同类型请求的特定处理方式。通过这样的配置,Nginx可以高效地为不同的网站或应用提供Web服务。

位置指令配置

location块是Nginx配置中最灵活的部分,可以根据不同的URL模式进行不同的处理。在上面的例子中,我们有两个location块:

  • 第一个location /块处理所有请求,首先尝试静态文件,然后是目录,最后是index.php
  • 第二个location ~ \.php$块使用正则表达式匹配所有以.php结尾的URL,并通过FastCGI协议将请求转发给PHP处理器。

实战部署PHP站点

现在,我们已经了解了Nginx配置文件的基本结构和关键指令,接下来我们将实战部署一个PHP站点。

步骤1:安装Nginx和PHP

首先,我们需要在服务器上安装Nginx和PHP。对于基于Debian的系统,可以使用以下命令:

sudo apt update
sudo apt install nginx php php-fpm

步骤2:创建网站目录和文件

创建网站根目录和测试PHP文件:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.php

index.php文件中添加以下内容:

<?php
phpinfo();
?>

步骤3:配置Nginx服务器块

创建一个新的Nginx配置文件:

sudo nano /etc/nginx/sites-available/example.com

添加之前我们编写的server块配置,并根据实际情况修改server_nameroot指令的值。

步骤4:启用配置并测试

创建一个从sites-availablesites-enabled的符号链接:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

测试Nginx配置文件的语法,并重载Nginx以应用更改:

sudo nginx -t
sudo systemctl reload nginx

步骤5:配置DNS

确保你的域名example.com指向服务器的公网IP地址。

步骤6:测试网站

在浏览器中输入你的域名example.com,你应该能看到PHP的信息页面。

结语

通过以上的步骤,我们已经成功地使用Nginx部署了一个基于PHP的网站。Nginx的配置文件虽然复杂,但其模块化的设计使得我们可以根据需要灵活地配置每个部分。理解Nginx配置文件的结构和关键指令是高效使用Nginx的基础,也是Web开发者必备的技能之一。

在实际部署中,你可能还需要考虑HTTPS配置、性能优化、安全设置等高级话题。随着对Nginx的深入了解,你将能够更好地利用其强大功能,为你的网站提供稳定、高效的服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354655.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家具市场规模超7660亿美元,赛盈分销这些卧室家具在海外大卖!

今年&#xff0c;全球家具市场似乎表现都十分乐观。 根据海关出口总署的相关数据&#xff0c;我国的家具出口额1-5月份达到了2121.5亿元&#xff0c;同比增长20.5%。国内家具出口增速显著&#xff0c;换句话说&#xff0c;就是老外对家具又有更多的消费能力了。 在Statista的…

阿里云PAI大模型评测最佳实践

作者&#xff1a;施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代&#xff0c;随着模型效果的显著提升&#xff0c;模型评测的重要性日益凸显。科学、高效的模型评测&#xff0c;不仅能帮助开发者有效地衡量和对比不同模型的性能&#xff0c;更能指导他…

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化&#xff0c;协调多人同时编辑同一代码库&#xff0c;回溯历史版本&#xff0c;并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统&#xff0c;为开发人…

刷代码随想录有感(109):动态规划——01背包问题|一和零

题干&#xff1a; 代码 : class Solution { public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>>dp(m 1, vector<int>(n 1, 0));dp[0][0] 0;for(string i : strs){int oneNum 0;int zeroNum 0;for(char c : i…

Web渗透:XSS-反射型存储型

跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者将恶意脚本注入到网页中&#xff0c;其他用户在浏览这些页面时&#xff0c;可能会执行这些恶意脚本&#xff0c;从而导致各种安全问题&#xff0c;如…

innovus:如何设置timing报告格式

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 在flow中添加如下设置即可设置好timing report的格式。 set report_timing_format [list timing_point arc net cell fanout load slew incr_delay delay arrival total_derate…

示例:WPF中应用MarkupExtention自定义IValueConverter

一、目的&#xff1a;应用MarkupExtention定义IValueConverter&#xff0c;使得应用起来更简单和高效 二、实现 public abstract class MarkupValueConverterBase : MarkupExtension, IValueConverter{public abstract object Convert(object value, Type targetType, object …

高考志愿选专业,文科生如何分析选择专业?

每到高考时节&#xff0c;学生们最关注的就是专业选择&#xff0c;以及未来职业发展问题&#xff0c;对于文科生来说&#xff0c;面对文科专业的众多选择&#xff0c;很多人都有些不知所措&#xff0c;如何选择适合自己兴趣爱好&#xff0c;又有良好就业前景的工作。从哪些方面…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

18个机器学习核心算法模型总结

最强总结&#xff01;18个机器学习核心算法模型&#xff01;&#xff01; 大家好~ 在学习机器学习之后&#xff0c;你认为最重要的算法模型有哪些&#xff1f; 今儿的内容涉及到~ 线性回归逻辑回归决策树支持向量机朴素贝叶斯K近邻算法聚类算法神经网络集成方法降维算法主成…

哈喽GPT-4o——对GPT-4o 编程的思考与看法

GPT-4o&#xff08;“o”代表“全能”&#xff09;它可以接受任意组合的文本、音频和图像作为输入&#xff0c;并生成任意组合的文本、音频和图像输出。 &#x1f449; GPT功能&#xff1a; GPT-4o知识问答&#xff1a;支持1000token上下文记忆功能最强代码大模型Code Copilo…

通过噪声扰动缓解多模态大型语言模型的幻觉问题

摘要 该论文提出了一种名为NoiseBoost的方法&#xff0c;通过噪声扰动来缓解多模态大语言模型(MLLM)中的幻觉问题。论文分析指出&#xff0c;幻觉主要源于大语言模型固有的总结机制&#xff0c;导致对语言符号的过度依赖&#xff0c;而忽视了视觉信息。NoiseBoost通过在视觉特…

聊一聊 Monitor.Wait 和 Pluse 的底层玩法

一&#xff1a;背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上&#xff0c;曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息&#xff0c;刚好昨天有时间我就来研究一下。 二&#xff1a;Monitor.Wait 底层怎么玩的 1. 案…

【JavaEE精炼宝库】多线程(7)定时器

目录 一、定时器的概念 二、标准库中的定时器 三、自己实现一个定时器 3.1 MyTimerTask 实现&#xff1a; 3.2 MyTimer 实现&#xff1a; 一、定时器的概念 定时器也是软件开发中的⼀个重要组件。类似于一个 "闹钟"。达到一个设定的时间之后&#xff0c;就执行…

时间复杂度的相关概念

1. 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间&#xff0c;而是算法运行时间随着数据量变大时的增长趋势&#xff0c;也就是算法运行时间与输入数据的关系。 // 算法 A 的时间复杂度&#xff1a;常数阶 function algorithm_A(n) {console.log(0); } // 算法 B 的…

分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测

分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测&…

10.无代码爬虫软件做网页数据抓取流程——工作流程设置与数据预览

首先&#xff0c;多数情况下免费版本的功能&#xff0c;已经可以满足绝大多数采集需求&#xff0c;想了解八爪鱼采集器版本区别的详情&#xff0c;请访问这篇帖子&#xff1a;https://blog.csdn.net/cctv1123/article/details/139581468 八爪鱼采集器免费版和个人版、团队版下…

Salia PLCC cPH2 远程命令执行漏洞(CVE-2023-46359)

漏洞描述 Salia PLCC cPH2 v1.87.0 及更早版本中存在一个操作系统命令注入漏洞&#xff0c;该漏洞可能允许未经身份验证的远程攻击者通过传递给连接检查功能的特制参数在系统上执行任意命令。 产品界面 fofa语法 "Salia PLCC" POC GET /connectioncheck.php?ip1…

Android Studio项目升级报错:Namespace not specified

原项目升级AGP到8.0时报错&#xff1a; Namespace not specified. Specify a namespace in the modules build file: C:\Users\Administrator\Desktop\MyJetpack\app\build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about…

vue大作业-端午节主题网站

vue大作业-端午节主题网站介绍 端午节&#xff0c;又称为龙舟节&#xff0c;是中国的传统节日之一&#xff0c;每年农历五月初五庆祝。这个节日不仅是纪念古代爱国诗人屈原的日子&#xff0c;也是家人团聚、共享美食的时刻。今天&#xff0c;我们非常高兴地分享一个以端午节为…