CentOS7下Nginx服务器安装与使用教程

摘要:Nginx服务器简介 :                 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 Nginx对比Apache优点 :        

Nginx服务器简介

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1 (101).jpg

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; } } }

没学会?写的太罗嗦? 没关系 小编这有一套nginx学习视频

链接:https://pan.baidu.com/s/1pM4PDdL 密码:emz2