如何学习和搭建Nginx

2,541 阅读6分钟

一、Nginx简介

Nginx是一个高性能的HTTP、反向代理服务,由俄罗斯人开发。其特点包括占有内存少、并发能力强,在同类网页服务器中表现优秀。Nginx的源代码以类BSD许可证的形式发布,因稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

NGINX 已成为 F5, Inc 的一员,是当前全球热门的开源项目 NGINX 背后的公司。F5 NGINX 提供云原生的、Kubernetes 友好的开源和商业解决方案,通过提供扩展性、可见性、安全性和治理功能,为至关重要的应用和 API 提供助力。

NGINX(读作:engine-x)是用于 Web 服务、反向代理、内容缓存、负载均衡、媒体流传输等场景的开源软件。NGINX 的创始人 Igor Sysoev 最初编写 NGINX 是为了解决 C10K 问题,如今,NGINX 已经成为全世界最流行的 web 服务器

1719047713493.jpg

二、准备依赖资源

  1. Nginx下载地址: nginx.org/en/download…

  2. 准备依赖包:在Linux系统中,需要先安装gcc、pcre、pcre-devel、zlib和openssl等依赖库。

  • gcc检查
gcc -v

已安装会显示版本号,如gcc-4.8.5-36.el7.x86_64,已安装则不需要再重复安装,未安装则提示未找到命令,则需要安装gcc,按网络条件选择在线或离线安装;

  • gcc在线安装
yum install gcc-c++
  • gcc离线安装

准备安装包:rpmfind.net/linux/RPM/c…

gcc-4.8.5-rpm.zip

或下载如下版本的安装文件

cpp-4.8.5-28.el7.x86_64.rpmgcc-4.8.5-28.el7.x86_64.rpmgcc-c++-4.8.5-36.el7.x86_64.rpmglibc-devel-2.17-222.el7.x86_64.rpmglibc-headers-2.17-222.el7.x86_64.rpmkernel-headers-3.10.0-862.el7.x86_64.rpmlibmpc-1.0.1-3.el7.x86_64.rpmmpfr-3.1.1-4.el7.x86_64.rpm

将文件上传到目标Linux系统的/home/nginx/gcc目录

cd  /home/nginx/gccunzip gcc-4.8.5-rpmcd gcc-4.8.5-rpmrpm  -ivh  *.rpm --nodeps --force
  • pcre安装

  • pcre检查

rpm -qa pcre

已安装会显示版本号,如pcre-8.32-17.el7.x86_64,已安装则不需要再重复安装,未安装则提示未找到命令,则需要安装pcre,按网络条件选择在线或离线安装;

  • pcre在线安装
yum install -y pcre pcre-devel
  • pcre离线安装

准备安装包:sourceforge.net/projects/pc…

pcre2-10.35.tar.gz

将文件上传到目标Linux系统的/home/nginx/pcre目录

执行如下命令安装:

cd /home/nginx/pcretar -zxvf pcre2-10.35.tar.gzcd pcre2-10.35sudo ./configuresudo makesudo make install
  • zlib检查

| yum list installed | grep zlib* | | --------------------------------- |

已安装会显示版本号,如:1.2.7-18.el7,已安装则不需要再重复安装,未安装则无列表信息,则需要安装zlib,按网络条件选择在线或离线安装;

  • zlib在线安装
yum install -y zlib zlib-devel
  • zlib离线安装

准备安装包:(wget ​​​​​​https://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz)中或下载如下版本的安装文件:

zlib-1.2.11.tar.gz

将文件上传到目标Linux系统的/home/nginx/zlib目录。

执行如下命令安装:

cd /home/nginx/zlibtar -zxvf zlib-1.2.11.tar.gzcd zlib-1.2.11./configuremakemake install

三、Nginx的安装

  1. 准备Nginx安装包 在中间件安装包中或下载如下版本的nginx安装文件: nginx-1.20.1.tar.gz 将文件上传到目标Linux系统的/home/nginx/目录
  2. 执行安装命令:
tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
sudo ./configure   

指定安装路径( ./configure --prefix=/usr/local/nginx/ && make && sudo make install )

sudo make
sudo make install

安装后会打印出 nginx的安装目录 /home/nginx 以及配置文件目录/home/nginx/conf/nginx.conf 启动Nginx,nginx默认端口为80

cd /home/nginx/sbin/
./nginx
  1. 查看是否启动成功:
curl http://127.0.0.1

如上信息即启动成功。

  1. Nginx常用命令
cd /home/nginx/sbin
#启动
./nginx
#停止
./nginx -s stop
#重启
./nginx -s reload

查看是否启动

ps -ef|grep nginx

开机启动配置,设置开机启动后

vim /usr/lib/systemd/system/nginx.service

复制如下内容:

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/home/nginx/sbin/nginx
ExecReload=/home/nginx/sbin/nginx -s reload
ExecStop=/home/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target
#保存后,执行命令刷新开机配置:
systemctl daemon-reload

启动Nginx

systemctl start nginx 

停止Nginx

systemctl stop nginx

重启Nginx

systemctl restart nginx

重新加载Nginx

systemctl reload nginx

查看 Nginx 运行状态

systemctl status nginx

查看Nginx进程

ps -ef | grep nginx

杀死Nginx进程

kill -9 pid # 根据上面查看到的Nginx进程号,杀死Nginx进程,-9 表示强制结束进程 修改端口号

cd /home/nginx/conf
vi nginx.conf

如下图所示修改 listen后面的80为指定的端口号即可(不可被占用)

至此Nginx安装完成。

四、Nginx的配置

  1. 配置文件位置:Nginx的主要配置文件是nginx.conf,通常位于/usr/local/nginx/conf/etc/nginx目录下。

  2. 常用配置

    • worker_processes:指定工作进程数,一般设置为CPU核心数。
    • worker_connections:设置单个工作进程最大并发连接数。
    • events:配置事件驱动模型,如epoll、kqueue等。
    • http:配置HTTP相关参数,如sendfile、keepalive_timeout等。
    • server:配置虚拟主机,包括监听端口、域名解析等。
    • location:配置URL定位,如静态文件、动态请求等。
  3. 优化配置

    • 开启gzip压缩,提高传输效率。
    • 配置SSL,支持HTTPS访问。
    • 配置负载均衡,实现多服务器间的请求分发。

四、Nginx的应用场景

  1. 反向代理:作为Web服务器的前端,接收客户端的请求,并转发给后端的Web服务器。
  2. 负载均衡:将用户请求分发到多个后端服务器上,实现负载的均衡分配。
  3. 动静分离:将静态文件和动态请求分开处理,提高网站的性能和响应速度。

个人简介

👋 您好,我是老谭说架构,一位资深的Java技术开发者!座右铭:Technology makes the world a better place!.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发、数据治理、AIGC和最新技术趋势的地方。

🧠 作为一个 IT 技术爱好者,并且对Java、微服务、数据治理方向有浓厚的兴趣,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,为各位技术开发者分享Java核心概念、JVM 底层技术、微服务技术、领域驱动设计、MySQL等数据库管理、RabbitMQ等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 敬请持关注我的博客,让我们共同追求技术卓越和成长。