Nginx服务器简介 :
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx对比Apache优点 :
1、轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源
2、抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
3、nginx 处理静态文件好,静态处理性能比 apache 高三倍以上
4、nginx 作为负载均衡服务器,支持 7 层负载均衡
5、nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器
6、nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃
前言: 如果你还没有自己的服务器 请参考 教你从零开始搭建阿里云ESC服务器 此文章会详细的介绍 如何搭建自己的服务器 并且此文章基于上述服务器搭建教程目录结构等 此文章为新手教程文章 高手勿喷
一、安装所需要的环境
1、gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装
yum install gcc-c++
2、PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
3、zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库
yum install -y zlib zlib-devel
4、OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用
yum install -y openssl openssl-devel
二、下载并安装Nginx
1、下载nginx(不推荐)
直接下载.gz安装包 官网地址:https://nginx.org/en/download.html
2、使用命令下载
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
这里使用的是最新稳定版本Nginx 下载后如图(会下载到当前目录下)
3、解压nginx安装包
tar -zxvf nginx-1.12.2.tar.gz
4、使用默认配置(这里推荐使用默认配置
cd nginx-1.12.2
./configure
5、编译安装
make
make install
注意:代码要一行一行执行 防止出现未知错误
安装成功之后 安装的路径在 /usr/local/nginx 此文件夹内
6、Nginx一些命令
首先进入nginx的sbin目录下、
cd /usr/local/nginx/sbin/
启动命令:
./nginx
关闭命令:
./nginx -s stop
或
./nginx -s quit
./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
从新加载配置文件(用于修改nginx配置文件后使其生效)
./nginx -s reload
7、启动nginx
./nginx
nginx启动以后 在地址栏输入你服务器外网的ip地址 如果出现如下图所示 那么恭喜你nginx安装成功
Nginx常用功能
一、开启反向代理 并设置动静分离
什么是反向代理
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
什么是动静分离:
何谓动?何谓静呢?那我们java来说jsp、servlet等就是动,因为其离开我们的tomcat服务器的支持就会无法正常工作。而js、css等文件就是静了。因为离开tomcat他一样能正常工作啊! 分开的话 减少tomcat的负担
步骤:
1、移动到nginx文件夹里面的bin文件夹
cd /usr/local/nginx/conf/
2、编辑nginx.conf文件
注意:这里说一下 如果不是特别熟悉linux的编辑器 那编辑起来简直就是很麻烦
这时候我们可以使用xftp5 将此配置文件拖到电脑里面 用window的编辑器来编辑会好的多 编辑以后在上传回去 当然了 教程还是要用vi编辑的(不熟悉vim)
vi nginx.conf
在配置文件中server{}标签的上面 http{}标签的里面添加如下代码
配置反向代理服务器
#tomcat反向代理服务器
upstream xx.com {
server localhost:8080 weight=1;
}
在配置文件中 #开头的是注释代码
xx.com为此代理服务器的地址 记住 后面要用到
localhost:8080 是tomcat服务器在你此服务器的地址
大概位置如图所示
3、配置代理参数
与server{}标签同级添加如下配置代码
4、设置动静分离配置代码
将以下代码添加到server{}标签内
location ~\.(jsp|do)$ {
#动态文件走tomcat服务器
proxy_pass http://hs.com;
}
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
#静态文件走nginx动态服务器
#这里需要指定一个静态文件的地址
#在部署项目的时候需要将项目放到此文件夹内
root /web_project;
expires 30d; #缓存30天
}
location ~ .*\.(js|css)?$ {
#静态文件走nginx动态服务器
#这里需要指定一个静态文件的地址
#在部署项目的时候需要将项目放到此文件夹内
root /web_project;
expires 30d; #缓存30天
}
ps:静态文件夹可以按照自己的需求来定 我将静态文件夹放到根下 所以要在根目录下创建 web_project文件夹 项目部署的时候放在tomcat 里面一份 放到此文件夹里面一份
动静分离到此结束 可以做一个小测试 写一个jsp界面 里面带一张图片 启动tomcat 启动nginx 将项目部署到tomcat 打开网页 图片不会显示 将项目部署到静态文件夹下面 刷新网页 图片正常显示 那么就成功了
二、开启压缩传输
何为压缩传输?顾名思义 就是传输文件的时候压缩了以后在传呗 减少服务器负担 传输快!!
步骤1、
在配置文件中server{}标签的上面 http{}标签的里面添加如下代码
#开启压缩传输;
gzip on;
gzip_min_length 1k; #最小1K
gzip_buffers 16 64K;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
重启nginx 搞定!
三、配置tomcat服务器集群
何为集群?
一个tomcat服务器最大支持的连接数是有限的 如果一瞬间突然访问量暴增 那么毫无疑问 tomcat肯定挂掉 如果使用集群 将流量平均分开 一个挂掉另一个顶上 这样以来保证了服务器不挂掉 而且还加大了并发量
步骤1、
其实吧这里有点小问题 集群以后是有session共享问题的 好
尽请期待小编的下一篇文章
:使用redies+nginx+tomcat进行集群并解决session共享
有些同学可能会怕配置文件配置不对 这里给出我的整体配置 附加详细注释
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
#use epoll;
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535
}
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#连接超时时间
keepalive_timeout 65;
#开启gzip压缩
gzip on;
gzip_min_length 1k; #最小1K
gzip_buffers 16 64K;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
#配置代理参数
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k; #设定请求缓冲
proxy_connect_timeout 65;
proxy_send_timeout 65;
proxy_read_timeout 65;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
#tomcat服务器组
upstream hs.com {
server localhost:8080 weight=1;
}
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用本地地址访问
server_name localhost;
#设置字符编码
charset UTF-8;
#access_log logs/host.access.log main;
#默认请求
location / {
root html;
index index.html index.htm;
}
location ~\.(jsp|do)$ {
#动态文件走tomcat服务器
proxy_pass http://hs.com;
}
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
#静态文件走nginx动态服务器
#这里需要指定一个静态文件的地址
#在部署项目的时候需要将项目放到此文件夹内
root /web_project;
expires 30d; #缓存30天
}
location ~ .*\.(js|css)?$ {
#静态文件走nginx动态服务器
#这里需要指定一个静态文件的地址
#在部署项目的时候需要将项目放到此文件夹内
root /web_project;
expires 30d; #缓存30天
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}