nginx
一:什么是Nginx?
很多人多Apache非常的熟悉,Nginx和Apahe类似,都属于Web容器,同时也是一款高性能的HTTP和反向代理软件
二:为什么要选择Nginx
Nginx和Apache最大的区别:
- (1)Apache处理速度非常慢,而且占用很多内存资源,Nginx正好相反,处理速度快,占用资源少
- (2)在功能Apache的所有的模块都是支持动静态编译,而Nginx都是静态编译(动态编译的可执行文件需要附加一个动态链接库,在执行时需要调用其动态链库中的中的命令.优点:缩小了执行文件的体积,加快了编译速度,节省系统资源.缺点:是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补)
- (3)Apache对FCGI的支持不好,而Nginx对FCGI支持非常的好.(FCGI是perl的一个模块,因为Nginx不能直接调用外部程序)
- (4)在处理链接上,Nginx支持epoll,而Apache却不支持(epoll Nginx的一种高效工作模式,这就是为什么nginx支持高并发,nginx 不同于 Apache2 的一点就是,Nginx 采用单线程,非阻塞,异步 IO 的工作模型。Apache2 对于每一个请求,都会创建一个新进程或线程,会浪费很多内存和 CPU 时间,而 Nginx 使用操作系统提供的IO多路复用技术(epoll), 在一个线程中处理所有的请求。当一个 IO 操作开始的时候,Nginx 不会等待操作完成就会去处理下一个请求,等到某个 IO 操作完成后,Nginx 再回过头去处理这次 IO 的后续工作)
- (5)从安装包看Nginx只有百K,Apache都按照M以算,非常的庞大
三:Nginx的优势
- (1)作为web服务器,Nginx处理静态文件和索引文件,自动搜索的效率非常之高
- (2)作为代理服务器,Nginx可以实现反向代理加速。提高网站的运行速度
- (3)做负载均衡器,Nginx可以再内部支持rails和php,可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错利用算法进行负载
- (4)在性能方面,Nginx专门为性能优化而开发的,支持最并发链接数为5万.
- (5)稳定方面 CPU占用资源非常低,官方表示Nginx保持1万个没有活动的链接,占用2.5M内存,官方声称在这种状态DDOS攻击是完全无效的.
- (6)在高性能方面,Nginx支持热部署,启动速度特别迅速,因此可以不间断服务的情况下,对软件的版本配置或者升级,不影响现网业务,运行几个月也不需要启动,几乎可以做7*24小时不间断运行
四:Nginx的模块工作原理
Nginx由内核和模块组成,内核设计非常小巧和简洁,完成的工作也是非常简单,通过配置文件将客户端请求映射到一个location block当中.然后通过这个location中的配置每个指令调用不同的模块,从而完成相应的工作.
Nginx的模块部分:
Nginx的模块从结构分:
核心模块包含了:http模块,event模块,mail模块
基础模块包含了:http Access模块 Http FastCGI模块 Http Proxy 模型和HTTP Rewrite模块.
第三方模块:Http upstream request模块,Notice模块和Http Access key模块
以上模块从功能分为3个大类:
(1)Handerls(处理模块)此类模块直接请求,并且将输出内容和修改Haders信息操作,
Handerls处理器模块只有一个
(2)Filters(过滤模块) 主要针对其它的处理模块输出内容和进修修改,最后由Nginx输出.
(3)Proxies(代理模块),此模块Nginx的HTTP upstream之类的模块,这些模块实现了后端服务比如:FastCGI的信息交互,实现代理服务和负载均衡.
HTTP发出请求
|
|
\|/
Nginx内核
|
|
选择一个Handlers处理模块
|
|
Handlers模块进行处理-----》交给Filters(过滤模块)-->响应HTTP请求
在工作方式上,Nginx分为单进程和双进程两种,Nginx默认工作方式为单进程工作
五、Nginx的安装与配置
(1)安装依赖库
# yum -y install gcc openssl-devel zlib-devel
安装pcre-delvel库pcre-8.01.tar.gz
# cd /soft/
# tar xf pcre-8.01.tar.gz -C tmp/
# cd tmp/pcre-8.01/
#./configure && make && make install
安装libmd5 libmd5-0.8.2b.tar.gz
# cd /soft/
#tar xf libmd5-0.8.2b.tar.gz -C tmp/
(2)安装Nginx
# useradd user_00 -g users -s /sbin/nologin
# cd /soft/
# tar -xvf nginx-0.8.55.tar.gz -C tmp/
# cd tmp/nginx-0.8.55/
./configure --user=user_00 --group=users --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-md5=/soft/md5/ --with-sha1=auto/lib/sha1 --with-pcre=/soft/pcre-8.01/ --without-select_module --without-poll_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_map_module --without-http_memcached_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --prefix=/usr/local/services/nginx-0.8.55
# make >/dev/null && make install >/dev/null
编译参数详解:
--with-http_realip_module
此模块支持显示真实来源IP地址,主要用于NGINX做前端负载均衡服务器使用。
-with-http_stub_status_module
这个模块可以取得一些nginx的运行状态,
--with-http_gzip_static_module
这个模块在一个预压缩文件传送到开启Gzip压缩的客户端之前检查是否已经存在以“.gz”结尾的压缩文件,这样可以防止文件被重复压缩。
--with-md5=/soft/md5/
设定md5库文件路径
--with-sha1=auto/lib/sha1
设定sha1库文件路径
--with-pcre=/soft/pcre-8.01
设定PCRE库路径
--without-select_module
标准连接模式。默认情况下自动编译方式。您可以启用或禁用通过使用-select_module和不带- select_module配置参数这个模块
--without-poll_module
不使用poll模块
--without-http_ssi_module
不使用ngx_http_ssi_module模块,此模块处理服务器端包含文件(ssi)的处理.
--without-http_userid_module
不使用ngx_http_userid_module模块
--without-http_geo_module
这个模块基于客户端的IP地址创建一些ngx_http_geoip_module变量,并与MaxMindGeoIP文件进行匹配,该模块仅用于 0.7.63和0.8.6版本之后。但效果不太理想,对于城市的IP记录并不是特别准确,不过对于网站的来源访问区域的分析大致有一定参考性
。
--without-http_map_module
不使用ngx_http_map_module模块
--without-http_memcached_module
不使用ngx_http_memcached_module模块
--without-mail_pop3_module
不允许ngx_mail_pop3_module模块
--without-mail_imap_module
不允许ngx_mail_imap_module模块
--without-mail_smtp_module
不允许ngx_mail_smtp_module模块
4.4、编辑主配置文件
配置文件位置:/usr/local/nginx/conf/nginx.conf
1. Nginx配置文件分为4个部分
2. main(全局设置)
3. server(主机设置)
4. upstream(负载均衡设置)
5. localtion(URL匹配特定位置的设置)
这四个 server继承main location继承server
upstream即不会继承 其它设置也不会被继承.
#vim /usr/local/nginx/conf/nginx.conf
#==================================一全局配置#========================
user user_00 users; #这个模块指令,指Nginx Worker 运用的用户和组,默认为nobody
worker_processes 8; #指定了要开启的进程数,每进程占用10M~12M的内存,建议和CPU的核心数量一样多的进程就行了。
error_log logs/error.log; #全局错误日志
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid; #:用来指定进程ID的存储位置.
#Specifies the value for maximum file descriptors that can be opened by this process.
#events 用来指定Nginx工作模式以及连接数上限
events {
use epoll; #使用epoll高效模式,适用于Linux,Unix使用kqueue,select
worker_connections 100000; #定义Ningx没个进程最大的连接数。默认为1024,受到文件句柄的约束。
}
worker_rlimit_nofile 100000; #打开的文件句柄数量最高为10万
#==================================二、HTTP配置========================
http {
include mime.types; #实现对配置文件所包含的文件设定
default_type application/octet-stream; #属于HTTP核心模块,默认设定为二进制流
server_tokens off; #禁止错误页面里显示nginx的版本号
# 定义日志处理的格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 定义它的hash表为128K
server_names_hash_bucket_size 128;
client_header_buffer_size 32k; #客户端请求头部的缓冲区大小,一般一个请求头的大小不会超过1k
large_client_header_buffers 4 32k; #客户请求头缓冲大小 nginx默认会用client_header_buffer_size这个buffer来读取header值
client_max_body_size 8m; #设定通过nginx上传文件的大小
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为on。
#如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on;
tcp_nopush on; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 60; #keepalive超时时间。连接保持活动时间超过这个,将被关闭掉
#===================重要位置============
fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 300; #向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300; #接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size 254k; #指定读取FastCGI应答第一部分需要用多大的缓冲区
fastcgi_buffers 16 256k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答。
fastcgi_busy_buffers_size 512k; #这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size 512k; #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
gzip on; #该指令用于开启或关闭gzip模块(on/off)
gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取
gzip_buffers 4 16k; #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
gzip_http_version 1.0; #识别http的协议版本
gzip_comp_level 2; #gzip压缩比,1压缩比最小处理速度最快
#匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的
gzip_types text/plain application/x-javascript text/css application/xml text/javascript;
gzip_vary on; #和http头有关系,加个vary头,给代理服务器用的
charset utf-8; #字符集为utf-8
access_log off; # 日常日志关闭
log_not_found off; # 日常日志关闭
error_page 400 403 405 408 /40x.html; # 错误返回页面
error_page 500 502 503 504 /50x.html; # 错误返回页面
#===================Server虚拟机配置保持默认============
server {
listen 80 default; #默认监听端口号为80
server_name _;
return 444;
}
#===================自定义虚拟机配置文件===========
include vhost/vhost.www.fanhougame.com;
}
主配虚拟Server配置文件如下:
server {
listen 80 ; #监听端口号
#域名为
server_name 10.0.0.201;
# 指定网站的目录
root /data/www/oa.com/www.fanhougame.com ;
# localtion模块指定网站首页名称
location / {
index index.php index.html index.htm;
if (!-e $request_filename) {
return 444;
}
}
#:返回的错误信息
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
#可以指定多个localtion进行不同的指令处理,这里是指定php的sock
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-5313-web.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
fastcgi_ignore_client_abort on;
}
#指定对网页图片格式进行缓存max表示10年,也可以是30d(天)
location ~ \.(swf|js|css|xml|gif|jpg|jpeg|png|bmp)$ {
error_log off;
access_log off;
#expires 30d;
expires max;
}
}
4.5、启动与平滑重启
# cd /usr/local/services/nginx-0.8.55/sbin/
# ./nginx –t 检测配置文件是否有错误
# ./nginx 启动nginx
# ./nginx -s reload
####################################################################################
六、Nginx常用配置实例
6.1、负载均衡配置实例环境:
Master:10.0.0.201
Master Web 10.0.0.201:81
Slave1 Web 10.0.0.202:80
Slave2 Web 10.0.0.203:80
6.2、在201编辑主配置文件nginx.conf
# vim /usr/local/service/nginx/conf/nginx.conf
6.3、在201上面编辑虚拟主机配置文件vhost.aatest.com
# vim /usr/local/service/nginx/conf/vhost/vhost.aatest.com
6.4、在201上面编辑负载均很配置文件
# vim /usr/local/service/nginx/conf/vhost/vhost.fuzai
upstream www.aatest.com {
server 10.0.0.201:81 weight=1 max_fails=3 fail_timeout=20s;
server 10.0.0.202:80 weight=1 max_fails=3 fail_timeout=20s;
server 10.0.0.203:80 weight=1 max_fails=3 fail_timeout=20s;
}
server{
listen 80;
server_name www.aatest.com;
location / {
proxy_pass http://www.aatest.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
6.5、在202和203编辑如下主配置文件
# vim /usr/local/service/nginx/conf/nginx.conf
6.5、在202和203编辑如下虚拟主机配置文件
# vim /usr/local/service/nginx/conf/www.aatest.com
server {
listen 80 ; #监听端口号
#域名为
server_name www.aatest.com;
# 指定网站的目录
root /opt/zeng ;
# localtion模块指定网站首页名称
location / {
index index.php index.html index.htm;
if (!-e $request_filename) {
return 444;
}
}
#:返回的错误信息
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
#可以指定多个localtion进行不同的指令处理,这里是指定php的sock
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-5313-web.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
fastcgi_ignore_client_abort on;
}
#指定对网页图片格式进行缓存max表示10年,也可以是30d(天)
location ~ \.(swf|js|css|xml|gif|jpg|jpeg|png|bmp)$ {
error_log off;
access_log off;
#expires 30d;
expires max;
}
}
[size=small][color=blue]总结如下:
单机WEB配置
1、安装库
2、安装Nginx
3、编辑Nginx.conf主文件(注意编辑完虚拟配置文件之后。要主文件相关连(include file>
4、编辑虚拟机的配置文件
5、启动服务
6、建立网站对应的目录,编写一些静态的html页面.echo "test" >index.html
负载均衡的配置
环境:
10.0.0.201 负载均衡服务器:对外80
10.0.0.201 虚拟主机(WEB)81
[/color][/size]
10.0.32.111 端口号:80
10.0.0.131 端口号:80
步骤一、在201 32.111 131服务器上面都编辑Nginx.conf
步骤二、在201 111 131 编辑一个虚拟机配置文件
步骤三、在201上面编辑负载均衡的配置文件
步骤四、启动服务
练习题目如下:
企业需要建立3个网站
www.gongda1.com
www.gongda2.com
www.gongda3.com
要求安装Nginx,开3个虚拟主机
要求在浏览器里面输入:
http://www.gongda1.com
返回内容为:this gongda1
http://www.gongda2.com
返回内容为:this gongda2
http://www.gongda3.com
返回内容为:this gongda3
分享到:
相关推荐
为了在Linux系统上顺利安装和运行Nginx,需要依赖一些基础的软件包。这里提到的几个文件是Nginx构建过程中必不可少的组件: 1. **libtool-2.4.2.tar.gz**:Libtool是一个用于管理和构建共享库的工具,它可以帮助...
Linux Nginx是一个高度优化的HTTP和反向代理服务器,同时也支持IMAP/POP3/SMTP服务。由Igor Sysoev为Rambler.ru站点开发,它的高性能和稳定性使其在众多知名网站中被广泛采用,包括新浪博客、网易新闻、Discuz! 论坛...
本文将详细介绍Nginx在Linux环境中的应用及其主要特性,特别是1.20.1版本的新变化。 Nginx的特点: 1. **事件驱动模型**:Nginx采用非阻塞I/O多路复用模型(如epoll),使其能处理大量并发连接,提高了系统资源利用...
Linux Nginx 1.16.1 是一个流行的开源Web服务器和反向代理服务器,以其高性能、稳定性以及低内存占用而闻名。Nginx 的最新版本1.16.1是在其先前版本的基础上进行优化和增强的,旨在提供更好的性能和安全性。在这个...
Linux Nginx-GridFS是将MongoDB的GridFS存储系统与Nginx Web服务器集成的一种解决方案,用于高效地提供静态文件服务,如视频、图片等大文件的存储和访问。这种组合允许你在高流量环境下实现高性能的内容分发,特别...
Linux Nginx 1.20.0 是一个流行的开源Web服务器和反向代理服务器,以其高性能、稳定性以及低内存占用而闻名。Nginx 的最新版本 1.20.0 提供了一系列的更新、改进和修复,旨在增强其功能和安全性。在这个版本中,用户...
### Linux Nginx MySQL PHP (LNMP) 环境搭建详细步骤 #### 一、基础知识简介 在深入了解LNMP的安装配置之前,我们先简要回顾一下这四个组件的基本概念: - **Linux**:一个开源的操作系统,是服务器领域的主流选择...
Windows 版本的 Nginx 可能会稍微不同于 Linux 版本,因为 Windows 系统的某些特性和服务与 Unix-like 系统(如 Linux)有所不同。例如,配置文件路径、日志文件位置和启动脚本可能需要根据 Windows 环境进行调整。 ...
### Linux Nginx 双向认证服务搭建与Tomcat SSL步骤详解 #### 一、前言 在现代网络环境中,安全成为了不可忽视的关键因素。为了确保数据传输的安全性,使用HTTPS协议来保护通信内容变得至关重要。本文将详细介绍...
Linux Nginx 1.18.0 是一个流行的开源Web服务器和反向代理服务器,以其高性能、稳定性以及低内存占用而闻名。该版本是Nginx在2020年的更新之一,提供了多项增强功能和优化,以适应不断变化的网络环境。以下是关于这...
标题中的"C语言 Linux Nginx 线程池"涵盖了三个关键领域:C语言编程、Linux操作系统以及Nginx服务器。这些元素共同构成了一个高级话题,即如何在Linux环境中使用C语言来实现Nginx服务器的线程池功能。线程池是一种...
在Linux环境中,Nginx是一款广泛应用的开源Web服务器,以其高性能、稳定性以及模块化设计而著名。本教程将详述如何在没有网络连接的情况下,通过离线安装包在Linux系统上安装Nginx。 首先,我们需要理解Linux系统的...
Nginx 1.22.0 Linux 版本,解压安装。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型...
linux nginx mysql php 安装脚本,包括资源下载和安装
linux nginx nginx_upstream_jvm_route
1)资源:linux下nginx离线安装包及相关依赖包; 2)教程:https://blog.csdn.net/hualinger/article/details/125298009?spm=1001.2014.3001.5502
在 Linux 系统上升级 Nginx 版本 Nginx 是一个流行的开源 Web 服务器软件,可以运行在多种操作系统上,其中包括 Linux。随着 Nginx 的不断更新和发展,升级 Nginx 版本成为一个不可避免的问题。本文将指导您在 ...
Linux nginx安装配置步骤.txt
在Linux系统中安装Nginx是一项基础且重要的任务,尤其对于运维人员来说,理解这个过程中的每一个步骤和涉及的依赖包至关重要。Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务,它的轻量级、稳定性和高...