在Linux系统上使用Nginx的详解指南

目录

  1. 简介

  2. 准备工作

  3. 安装Nginx

    • 通过包管理器安装

    • 源码编译安装

  4. Nginx基础配置

    • 主配置文件nginx.conf详解

    • 基本服务器块配置

  5. SSL/TLS配置

  6. 动静分离

  7. 反向代理配置

  8. 负载均衡配置

  9. 常见问题及解决方法

  10. 结论

1. 简介

Nginx是一款高性能HTTP和反向代理服务器,由Igor Sysoev编写, 2004年首次公开发布。目前Nginx已发展为一个包含多项功能的高性能网络服务器,得益于其事件驱动架构,使其在高并发下仍能保持低内存占用和高吞吐量的特点。

Nginx的优点

  • 高性能和高并发:采用异步非阻塞IO,可以处理大量并发连接。

  • 稳定性:在长期运行下也能保证稳定性和较低的内存消耗。

  • 简单配置:模块化的配置文件使得Nginx相对Apache更易于配置和管理。

  • 灵活性:支持HTTP、HTTPS、邮件代理等多种协议,同时拥有丰富的第三方模块。

2. 准备工作

在安装和配置Nginx之前,我们需要保证我们的Linux操作系统准备就绪:

  • 更新系统:确保你的系统中所有包都是最新版本。

  • 拥有root权限:安装软件和修改配置文件需要root权限。

假设我们在使用的是Ubuntu 20.04 LTS,首先更新系统包:


sudo apt update && sudo apt upgrade -y

切换到root用户(如果需要):


sudo su

3. 安装Nginx

通过包管理器安装

对于大多数Linux发行版,Nginx都在官方的包管理器中提供。这种方式简单快捷,也是推荐的安装方法。

在Debian/Ubuntu上安装

sudo apt install nginx -y
在CentOS/RedHat上安装

首先启用EPEL仓库:


sudo yum install epel-release -y

然后安装Nginx:


sudo yum install nginx -y

源码编译安装

有时候,我们需要从源码编译Nginx,以便定制或优化某些特性。以下是源码编译的步骤:

  1. 安装依赖工具

sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y
  1. 下载Nginx源码包

wget http://nginx.org/download/nginx-1.21.4.tar.gztar -zxvf nginx-1.21.4.tar.gzcd nginx-1.21.4
  1. 配置编译选项,编译并安装

./configure --prefix=/usr/local/nginx --with-http_ssl_modulemakesudo make install
  1. 启动Nginx

sudo /usr/local/nginx/sbin/nginx

4. Nginx基础配置

Nginx的配置文件通常位于/etc/nginx目录下。在这个目录中,主配置文件是nginx.conf

主配置文件nginx.conf详解

下面是nginx.conf的基础结构和解读:


user www-data;worker_processes auto;pid /run/nginx.pid;events {worker_connections 1024;}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;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;}
  • user: 定义Nginx服务以什么用户身份运行。

  • worker_processes: 定义工作进程的数量,通常设为自动。

  • events: 配置事件驱动模型,如最大连接数。

  • http: HTTP服务器配置,包括日志格式、文件类型、连接参数等。

基本服务器块配置

服务器块(Server Block)是Nginx配置文件中的一个重要组成部分,定义了一个虚拟主机的相关配置。一个简单的服务器块示例:


server {listen 80;server_name example.com;location / {root /var/www/html;index index.html index.htm;}error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
  • listen: 定义监听端口。

  • server_name: 定义虚拟主机名。

  • location: 定义URL路径匹配规则。

  • root: 设置根目录。

  • index: 定义默认首页文件名。

5. SSL/TLS配置

为网站启用SSL/TLS可以提高网站的安全性。以下是配置SSL/TLS的方法:

1. 获取SSL证书

可以通过Let’s Encrypt免费获取SSL证书。首先,安装Certbot:


sudo apt install certbot python3-certbot-nginx -y

2. 获取证书并自动配置Nginx:


sudo certbot --nginx -d example.com -d www.example.com

按照提示完成验证和证书安装。

3. 手动配置SSL:

如果你已经有了证书,则可以手动配置:


server {listen 443 ssl;server_name example.com;ssl_certificate /etc/ssl/certs/cert.pem;ssl_certificate_key /etc/ssl/private/key.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {root /var/www/html;index index.html index.htm;}}

6. 动静分离

动静分离是提升服务器性能的重要手段之一。Nginx可以直接处理静态资源请求,减轻后端服务器的负担,只将动态请求交给后端处理。以下是配置示例:


server {listen 80;server_name example.com;root /var/www/html;index index.php index.html index.htm;location / {try_files $uri $uri/ =404;}location ~ \.php$ {fastcgi_pass unix:/run/php/php7.4-fpm.sock;include snippets/fastcgi-php.conf;}location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 7d;}}
  • try_files: 尝试访问文件或目录,如果不存在则返回404。

  • fastcgi_pass: 将PHP请求交由PHP-FPM处理。

  • location ~*: 用正则表达式匹配静态文件,并设置缓存时间。

7. 反向代理配置

反向代理是Nginx的核心功能之一,常用于负载均衡、应用加速等场景。


server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
  • proxy_pass: 定义后端服务器地址。

  • proxy_set_header: 设置额外的HTTP头,用于传递客户端请求信息。

8. 负载均衡配置

Nginx可以通过轮询、最少连接、IP哈希等多种方式进行负载均衡:


http {upstream backend {server backend1.example.com;server backend2.example.com;}server {listen 80;server_name example.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}}
  • upstream: 定义后端服务器组。

  • server: 在HTTP上下文中定义,引用后端服务器组。

9. 常见问题及解决方法

即使配置正确,有时仍会遇到一些问题,以下是一些常见问题及解决方法:

1. Nginx服务启动失败

检查配置文件是否有语法错误:


sudo nginx -t

检查日志文件获取错误信息:


sudo tail -f /var/log/nginx/error.log

2. 403 Forbidden错误

确保目录和文件的权限正确:


sudo chown -R www-data:www-data /var/www/htmlsudo chmod -R 755 /var/www/html

3. 502 Bad Gateway错误

确保后端服务器正常运行,并且Nginx到后端服务器的连接配置正确。

4. SSL证书问题

如果证书配置错误或过期,会导致SSL握手失败,可以通过以下命令检查SSL配置:


sudo openssl s_client -connect example.com:443

10. 结论

Nginx作为一款高效的HTTP和反向代理服务器,其广泛的应用和强大的性能使其在现代网络架构中占有一席之地。通过本文的介绍,相信你已经对Nginx的安装、基础配置、SSL/TLS、动静分离、反向代理及负载均衡有了比较全面的了解。希望这些内容能帮助你更好地管理和优化你的网站。

如果你有更多的需求,Nginx还提供了丰富的模块和高级配置,鼓励你深入探索其更多功能和应用场景。Happy Learning!

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

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

相关文章

上位机图像处理和嵌入式模块部署(f103 mcu唯一的id)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于stm32f103系列mcu来说,一般每一颗原厂的mcu,都会对应一个唯一的id。那这个id可以用来做什么用呢?个人认为,可以用来做激活使用。举个例子,第一次mcu模块使用的时候,一般可…

Java 零基础入门学习(小白也能看懂!)

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

第16篇:JTAG UART IP应用<三>

Q:如何通过HAL API函数库访问JTAG UART? A:Quartus硬件工程以及Platform Designer系统也和第一个Nios II工程--Hello_World的Quartus硬件工程一样。 Nios II软件工程对应的C程序调用HAL API函数,如open用于打开和创建文件&#…

前端最新面试题(ES6模块篇)

目录 1 ES5、ES6和ES2015有什么区别? 2 babel是什么,有什么作用? 3 let有什么用,有了var为什么还要用let? 4 举一些ES6对String字符串类型做的常用升级优化? 5 举一些ES6对Array数组类型做的常用升级优化 6 举一些ES6对Number数字类型做的常用升级优化 7 举一些ES…

前端基础入门三大核心之JS篇:JavaScript,不只是咖啡因那么简单!—— 进阶案例集锦篇

前端基础入门三大核心之JS篇:解锁JavaScript的魔法密钥—— 进阶案例集锦 🧙 基础概念与作用:JS,不仅仅是“脚本”📚 变量声明的进化史 🔍 多维度功能使用:函数、数组与对象🤖 函数&…

前后端联调小细节

前端向后端发数据,有时候前端和后端的字段是一样的,字段没有问题,前端发过来的载荷也没有问题,但后端接收到的字段是null的,这时候可以排查前端发过来的数据是不是多嵌套了一层,比如发过来的是。 实例如下…

使用YOLOv9训练和测试自己的数据集

任务:检测舌头上的裂纹和齿痕 已经有了labelme标注的数据集,并且转为了coco格式 参考: 详细!正确!COCO数据集(.json)训练格式转换成YOLO格式(.txt)_coco数据集的train…

服务器数据恢复—服务器raid常见故障表现原因解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬…

2023年全国青少年人工智能创新挑战赛真题

为了大家备考2024年第七届全国青少年人工智能创新挑战赛,今天分享2023年第6届全国青少年人工智能创新挑战赛C信息学专项真题,图形化编程及Python编程基本大同小异,参考6547网的Python及图形化编程题库。 一、单项选择题(共 15 题,每题 2 分,共…

jpom linux发布前端 ruoyi

前置条件 辅助安装 一键安装maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一键安装node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服务下载启动 下载安装 安装服务 安装服…

vscode中使用conda虚拟环境

每一次配置环境,真的巨烦,网上的资料一堆还得一个个尝试,遂进行整理 1.准备安装好Anaconda 附带一篇测试教程,安装anaconda 2.准备安装vscode 安装地址:Visual Studio Code 3.创建Conda环境 搜索框搜索Anaconda…

位运算符——原码-反码-补码(重点 难点)【二进制在运算中的说明】

如果连二进制的知识还没搞懂, 那么计算机最基础的你都还没明白, 所以2进制对我们程序员来说, 是必会, 必学的知识 二进制在运算中的说明: 一. 二进制是逢2进位的进位制, 0,1是基本算符 二. 现代的电子计算机技术全部采用的是二进制, 因为它只使用0, 1两个数字符号,非常简单…

Nginx添加访问密码

安装密码生成工具 yum -y install httpd-tools生成用户和密码文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 这里输入密码 Re-type new password: 再次输入密码 Adding password for user web01参数说明: web01 是自定…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及液态空气储能与综合需求响应的综合能源系统低碳经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

HTML静态网页成品作业(HTML+CSS)——游戏阴阳师介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

Android ANR简介

ANR(App not respond)是Android定义的一种稳定性问题类型;系统发出关键消息,同时发出此消息的超时消息。处理逻辑有两种情况: 关键消息被执行,超时消息被清除;ANR不会发生超时消息被执行&#x…

JAVASE2

封装的步骤: 1、所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问 2、对外提供简单入口:比如说被private修饰的成员变量,在其他类中只能通过getXxx/setXxx方法…

网络风暴:揭秘DDoS攻击的幕后黑手

在数字化时代的浪潮中,网络攻击已成为一种新型的战争手段。其中,分布式拒绝服务攻击(DDoS)以其强大的破坏力和隐蔽性,成为网络安全领域的一大挑战。DDoS攻击通过发动海量的恶意流量,如同狂风暴雨般席卷目标…

如何设置远程桌面连接?

远程桌面连接是一种方便快捷的远程访问工具,可以帮助用户在不同地区间快速组建局域网,解决复杂网络环境下的远程连接问题。本文将针对使用远程桌面连接的操作步骤进行详细介绍,以帮助大家快速上手。 步骤一:下载并安装远程桌面连接…

芯片丝印反查

芯片丝印反查网 - IC芯片丝印,IC芯片代码,IC芯片印字,IC芯片顶标,SMD code,marking code,top mark芯查查-电子信息产业数据引擎 ic/芯片丝印反查网-芯查查