linux:nginx
nginx介绍
一个高性能的http服务器/反向代理服务器及电子邮件代理服务器
nginx 大致有三大功能(静态web服务器、反向代理、负载均衡)
nginx一般同时做为静态web服务器和反向代理服务器,做为web服务器访问静态文件图片、css、js、html等文件;做为反向代理服务器把请求发给后端业务处理服务,如果有多个后端处理节点,会配置负载均衡功能。
排名:链接

Nginx有多种版本,例如:Nginx plus 和 Openresty,这些都是集成了其他的插件的的Nginx版本。
源码包安装
下载
下载地址:链接
在服务器端下载:wget 地址
将nginx下载到 /usr/local/src:
wget http://nginx.org/download/nginx-1.19.0.tar.gz
查看:

解压
tar -zxvf nginx-1.19.0.tar.gz
进入解压目录查看:

配置
./configure --prefix=/usr/local/nginx
出错:没有PCRE库

解决方法:直接yum安装pcre-devel
yum install pcre-level
安装完成:

再次尝试:
./configure --prefix=/usr/local/nginx --with-pcre
再次报错:没有zlib库

解决方法:直接yum安装zlib库,并将zlib库下载后解压
yum install zlib-devel
安装完成:

下载zlib库并解压:
wget http://www.zlib.net/zlib-1.2.11.tar.gz
解压后查看:
tar -zxvf zlib-1.2.11.tar.gz

再次尝试:
./configure --prefix=/usr/local/nginx --with-pcre --with-zlib=/usr/local/src/zlib-1.2.11

编译
make

安装
make install

安装完成的目录:

改端口
运行
由于nginx也占用端口8080,故先停止Apache,再运行nginx:

nginx启动:
/usr/local/nginx/sbin/nginx

nginx重启:
/usr/local/nginx/sbin/nginx -s reload
nginx关闭:
查看端口:
netstat -tnlp

kill该进程:
kill 17005
yum安装
下载
1、在 /etc/yum.repos.d/ 下创建 nginx.repo 文件
vi /etc/yum.repos.d/nginx.repo
2、按 “i” 切换至编辑模式,写入以下内容
[nginx]
name = nginx repo
baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck = 0
enabled = 1
3、按 “Esc”,输入 “:x”,保存文件并返回
安装
yum install -y nginx
编辑
1、打开 nginx.conf 文件
vim /etc/nginx/nginx.conf
2、按 “i” 切换至编辑模式,编辑 nginx.conf 文件
3、找到 server{...},并将 server 大括号中相应的配置信息替换为如下内容。用于取消对 IPv6 地址的监听,同时配置 Nginx,实现与 PHP 的联动。
server {
listen 80;
root /usr/share/nginx/html;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
#
location / {
index index.php index.html index.htm;
}
#error_page 404 /404.html;
#redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
若 nginx.conf 文件中未找到 server{...},请在 include /etc/nginx/conf.d/*conf;上方添加以上的 server{...} 配置内容

按 “Esc”,输入 “:x”,保存文件并返回
启动
systemctl start nginx
设置为开机自启动
systemctl enable nginx
测试
http://云服务器实例的公网 IP

卸载
yum remove nginx
查看nginx是否还存在:
which nginx

配置文件解读
参考:链接
代理
参考:链接
反向代理
nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。
反向代理服务器是一种代理服务器,用于管理从外部网络到内部网络的连接或任何特定请求。它保护、路由和管理从外部网络到内部网络、Web服务器或专用网络的流量。
外部机器通过网关访问网关后面服务器上的内容,网关起到了反向代理的功能,我们平时通过浏览器访问远程的web服务器大都是这样实现的。

外网客户机:我们平时打开浏览器输入网址访问www.nginx.cn的场景中,我们的笔记本就可以理解为一个外网客户机。
nginx反向代理服务:浏览器输入网址并回车后,会发起一个http请求给nginx(反向代理服务器),这个请求如果是访问静态文件,那么nginx作为web服务器直接返回请求的内容,如果是访问的后台服务逻辑,那么nginx把请求转发给后端的服务处理。
内网web服务:后端的服务可以是很多种类型,LNMP环境下的php-fpm进程,Java环境下的tomcat、jetty等容器,通过程序逻辑处理http请求,生成html页面或者json串返回给客户端。对于小型应用,后端服务可以和nginx部署在同一台机器上。
反向代理的好处
主要就是为了配合upstream实现负载均衡
1、增加了安全性,客户端不能直接访问后端服务,中间多了一个屏障
2、提升了性能,通过异步非阻塞的方式把请求传给后端,提升了并发能力
3、利用缓存、压缩响应提高响应速度
配置
nginx 反向代理不需要编译额外的模块,默认自带的proxy_pass和fastcgi_pass指令,通过在location配置块中增加指令即可实现
以www.nginx.cn为例,这个网站用的wordpress程序,wordpress是php语言编写,那么需要通过php运行环境,可以选择apache的php扩展或者php-fpm环境,主流的选择是php-fpm,php-fpm设置为Unix socket模式或者ip:端口模式 。
Unix socket后端服务配置
server {
listen 80;
server_name www.nginx.cn nginx.cn;
location /app {
fastcgi_pass unix:/tmp/php-cgi.sock;
}
}
ip端口后端服务配置
server {
listen 80;
server_name www.nginx.cn nginx.cn;
location /app {
proxy_pass http://127.0.0.1:8080;
}
}
proxy_pass和fastcgi_pass区别
对于上面介绍的两种情况下proxy_pass和fastcgi_pass可以互相替代使用,不过两者还是有区别的,从名字我们就可以看出来,fastcgi_pass是用来反向代理fastcgi协议,proxy_pass可以代理包括fastcgi协议在内的其它协议。
例如镜像一个网站,这种情况下就需要proxy_pass:
location /{
proxy_pass http://www.baidu.com;
}
正向代理
参考:链接
局域网中的用户通过网关做代理访问外部的网络。【代理上网】
配置
user www;
worker_processes 1;
error_log /var/log/nginx/error.log debug; events {
use epoll;
worker_connections 1024;
} http {
resolver 8.8.8.8; // 增加dns解析
server { // 增加没有server_name的server
listen 8088;
location / {
proxy_pass http://$http_host$request_uri; // proxy_pass指令
}
}
}
nginx实现代理上网,有三个关键点必须注意,其余的配置跟普通的nginx一样
1.增加dns解析resolver
2.增加无server_name名的server
3.proxy_pass指令
具体配置:
1、修改配置文件,如下所示:
resolver 8.8.8.8;
server {
listen 8088;
location / {
proxy_pass http://$http_host$request_uri;
}
}
2、重启nginx服务
3、设置ie代理

4、可以使用代理上网
可以访问http://ip.quancha.cn检测代理是否生效
使用nginx代理上网后:

使用nginx代理上网前:

负载均衡
参考:链接
负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法。Nginx是一种流行的Web服务器软件,可以配置为简单但功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载均衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。

配置
参考:链接
启用HTTPS
安装证书
参考:链接
健康检查
为了知道哪些服务器可用,nginx的反向代理实现包括被动服务器健康检查。如果服务器无法响应请求或回复错误,nginx会检测到服务失败,并将尝试一段时间内避免转发请求到该服务器。
通过参数max_fails 表示为定义特定时间段内连续不成功的连接尝试次数。默认情况下,如果未指定max_fails,则将此值设置为1.(可选)将max_fails设置为0将禁用对该服务器的运行状况检查。
如果将max_fails设置为大于1的值,则后续失败必须在特定时间范围内发生,以便无法计数。此时间范围由参数fail_timeout指定,该参数还定义服务器应被视为失败的时间。默认情况下,fail_timeout设置为10秒。
在服务器标记失败并且fail_timeout设置的时间已过后,nginx将开始使用客户端请求正常探测服务器。如果探测返回成功,则服务器再次标记为可用并且正常包含在负载平衡中
upstream backend {
server 10.1.0.101 weight=5;
server 10.1.0.102 max_fails=3 fail_timeout=30s;
server 10.1.0.103;
}
使用运行状况检查可以根据需要通过启动或关闭主机来使服务器后端适应当前需求。在高流量期间启动其他服务器可以在新资源自动供负载均衡器使用时轻松提高应用程序性能。
linux:nginx的更多相关文章
- Linux:nginx服务器的搭建
搭建nginx网站服务器 安装nginx yum install nginx 启动服务 安装完成后启动服务 systemctl start nginx 通过浏览器测试 地址栏输入localhost 不 ...
- Linux:nginx负载均衡
前提:web服务器框架已搭建好lamp/lnmp),已配置好虚拟主机名(这个的配置在上几章中有写). nginx做负载均衡主要的模块是upstream. 1.在新的机器上安装nginx 创建用户ngi ...
- Linux:nginx基础
一..简单介绍 nginx时开源的www服务器,只能解析静态的网页(html,js,css等),具有静态小文件高并发特性. 可做web服务器.负载均衡.web cache(web缓存) 优点: 1.高 ...
- Linux学习笔记:nginx基础
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP pro ...
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- Linux实战教学笔记27:Nginx详细讲解
前言:nginx的特点 本节主要对Nginx Web服务软件进行介绍,涉及Nginx的基础,特性,配置部署,优化,以及企业中的日常运维管理和应用.作为HTTP服务软件的后起之秀,Nginx与它的老大哥 ...
- 实现简单网页rtmp直播:nginx+ckplayer+linux
一.安装nginx 安装带有rtmp模块的nginx服务器(其它支持rtmp协议的流媒体服务器像easydarwin.srs等+Apache等web服务器也可以),此处使用nginx服务器,简单方便. ...
- linux shell:nginx日志切割脚本
需求原因:nginx不具备日志切割功能,日志量较大,方便分析. 实现目的:完成nginx日志切割,并根据时间命名 简要命令: mv /usr/local/tengine/logs/access.l ...
- 第一次项目上Linux服务器(六:Nginx安装及相关命令(转))
1.下载nginx 方法一 wget http://nginx.org/download/nginx-1.11.6.tar.gz 方法二 http://nginx.org/en/download.ht ...
随机推荐
- 用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
*无法联网的明显表现会有: 1.yum install出现 Error: cannot find a valid baseurl or repo:base 2.ping host会提示unknown ...
- Javaweb前台界面代码复用总结
servlet声明定义message信息传给前天界面判断输出message: if(booknamelist.size()==0) { message="根据书名查询没有结果!"; ...
- springboot容器启动顺序之@Configuration ContextRefreshedEvent事件初始化 ApplicationRunner
笔者最近遇到一个问题 我们根据自己业务需要 需要首次启动springboot项目时 把数据库数据同步至本地缓存(比如ehcache)但有一个要求 在缓存未载入成功 不允许有流量打入 一开始我们使用 ...
- spring之ApplicationEvent 事件驱动
什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些. ApplicationContext则是应用的容器. Sprin ...
- TurtleBot3 Waffle (tx2版华夫)(2)系统安装
Tx2系统默认是安装好的,由于镜像文件大于20G,无法上传百度网盘,所以如有需要请联系我们客服:下面主要是操作步骤: 2.1.准备工作 a.准备好利用Jetpack刷过机的Ubuntu的主机(HOST ...
- 最全Java面试题(一)
一.基础篇 1.1 java基础 面向对象的特征:继承.封装和多态 final, finally, finalize 的区别 final用于声明属性.方法和类,分别表示属性不可变.方法不可覆盖.类不可 ...
- maven打包 依赖jar与不依赖jar
?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.a ...
- fatal error C1045: 编译器限制 : 链接规范嵌套太深
前言 我相信你是遇到了同样的问题.通过搜索引擎来到这里的.为了不耽误排查问题的时间,我提前说明一下这篇文章所描述的问题范畴: 我遇到的问题和 c++ 模板相关: 如果我减少传递的参数的话,是有可能避免 ...
- 【SpringBoot1.x】SpringBoot1.x 任务
SpringBoot1.x 任务 文章源码 异步任务 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的.但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使 ...
- 【JDBC核心】数据库连接池
数据库连接池 传统模式 使用数据库的传统模式: 在主程序(servlet.beans等)中建立数据库连接: 进行 SQL 操作: 断开数据库连接. 这种模式存在的问题: JDBC 连接数据库的方式(四 ...