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; }
使用运行状况检查可以根据需要通过启动或关闭主机来使服务器后端适应当前需求。在高流量期间启动其他服务器可以在新资源自动供负载均衡器使用时轻松提高应用程序性能。