Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持java。Java程序只能通过与tomcat配合完成。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
Nginx是什么?Nginx介绍及Nginx的优点
Web Server Survey
Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
**正向代理:**如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
**反向代理:**其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级服务器的配置,比如提高CPU执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
nginx官网 nginx-1.12.2.tar.gz
### 这些安装包是在你离线没有网络的情况下安装的 pcre-8.37.tar.gz rewrite正则相关pcre:URL重写软件,实现伪静态\URL跳转等、SEO优化。 openssl-1.0.1t.tar.gz https加密访问用它 zlib-1.2.8.tar.gz 提供数据压缩用 nginx-1.12.2.tar.gz 链接:https://pan.baidu.com/s/19IlP0m0UG1_iv6mobcaNwg 提取码:w3sk Nginx 安装包 需要自行下载
下面的操作需要在Linux 上面进行,如果不熟悉Linux安装的教程请看下面的这篇Linux安装教程
Linux安装
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
configure参数作用 nginx -V 查看安装的参数及模块 参数作用: --prefix=PATH 路径 如果不指定nginx默认安装位置在 /usr/local --user=USER 用户 --group=GROUP 组 --with-pcre 伪静态 --with-http_stub_status_module 状态 --with-http_ssl_module 加密 443 例如 ./configure --user=www --group=www --prefix=/application/nginx-1.12.2/ --with-http_stub_status_module --with-http_ssl_module --with-pcre ### 这不需要执行
在windows系统中访问linux中nginx,默认不能访问的,因为防火墙问题,关闭防火墙-开放访问的端口号,80端口
查看开放的端口号
设置开放的服务或端口号
重启防火墙
firewall-cmd --reload
查看 firewall-cmd --list-all
访问 ip:port
配置环境变量PATH,加入nginx命令路径
vim /etc/profile增加:
增加后执行下面,使之生效
. /etc/profile 或者是 source /etc/profile
echo $PATH
/usr/local/nginx/sbin/:/usr/local/nginx/sbin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
现在在如何目录输入 nginx -v都可以有对应的结果,不会出现nginx命令找不到了。
nginx version: nginx/1.12.2
改成systemctl启动方式
vim /usr/lib/systemd/system/nginx.service
[Unit] Description=The nginx HTTP and reverse proxy server After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] WantedBy=multi-user.target
添加对应执行权限
chmod 777 /usr/lib/systemd/system/nginx.service # 任何用户都可以对这个文件进行可读可写可执行操作 systemctl enable nginx # 设置开机自动 pkill nginx # 杀掉之前的启动的nginx systemctl start nginx # 启动nginx lsof -i :80 # 查看80端口占用 如果没有这个命令则执行 yum install -y lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 21105 root 6u IPv4 67730 0t0 TCP *:http (LISTEN) nginx 21106 nobody 6u IPv4 67730 0t0 TCP *:http (LISTEN)
至此 就完成了 实际上2.3.5做的操作就是yum里面完成的操作。
通过systemctl这个命令启动。
mkdir -p /opt/tools
cd /opt/tools
把压缩包上传到 /opt/tools下面 可以用一些远程上传文件工具
解压缩 pcre-8.37.tar.gz 包
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37 执行./configure
ps 如果提示错误,需要提前安装gcc++
执行 cd /run/media/root/CentOS 7 x86_64/Packages(已经从中拷贝出来了26个安装包,直接使用准备好的文件夹rpmgcc安装即可) rpm -Uvh *.rpm --nodeps –force 或者通过yum安装 yum -y install gcc yum -y install gcc-c++ 检查安装后版本 gcc -v g++ -v
./configure完成后,执行make,最后执行make install。
vim /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
通过ip:port访问
nginx -v 输入nginx version: nginx/x.x.x 版本 说明nginx安装成功了
可以自己构建进行,也可以使用nginx官方镜像
启动nginx
访问nginx ip:port