我是靠谱客的博主 深情芝麻,最近开发中收集的这篇文章主要介绍Nginx入门教程(简介,安装,启动)1 Nginx简介2.Nginx安装与控制指令3.Nginx如何的工作4.如何配置Linux下Nginx,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 Nginx简介

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师IgorSysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

 

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

 

它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 Yandex、Mail.Ru、 VKontakte,以及 Rambler。据 Netcraft 统计,在 2012 年 8 月份,世界上最繁忙的网站中有 11.48%使用 Nginx 作为其服务器或者代理服务器。目前互联网主流公司360、百度、新浪、腾讯、阿里等,目前中国互联网企业 70%以上公司都在使用 nginx 作为自己的 web 服务器。Nginx 特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好。Nginx 由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过配置文件将客户端请求映射到一个 location block(location 是 Nginx配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。


Nginx 相对于 Apache 优点:
1) 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5w/s
2) 反向代理性能非常强。(可用于负载均衡)
3) 内存和 cpu 占用率低。(为 Apache 的 1/5-1/10)
4) 对后端服务有健康检查功能。
5) 支持 PHP cgi 方式和 fastcgi 方式。
6) 配置代码简洁且容易上手。

 

2. Nginx 工作原理及安装配置
Nginx 由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block(location 是 Nginx配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx 的模块从结构上分为

核心模块、基础模块和第三方模块:

 

核心模块:HTTP 模块、 EVENT 模块和 MAIL 模块
基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite模块,
第三方模块:HTTP Upstream Request Hash 模块、 Notice 模块和 HTTP Access Key模块。


Nginx 的高并发得益于其采用了 epoll 模型,与传统的服务器程序架构不同,epoll 是linux 内核 2.6 以后才出现的。 Nginx 采用 epoll 模型,异步非阻塞,而 Apache 采用的是select 模型

 

Select 特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,
select 需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。


epoll 的特点:epoll 对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事
件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高

2.Nginx安装与控制指令

2.1Windows版Nginx安装

 如何获取安装介质和安装Nginx

访问官方网站获取安装介质http://nginx.org/download,如下图

 

下载安装介质后,解压到一个不含空格的路径中即安装完成,如下图。

 

启动及停止Nginx服务

通过Windows命令行进入Nginx解压目录,如下图

执行start nginx.exe,即可以启动nginx服务,如下图

执行nginx.exe –s reload:重新加载配置文件。(关闭已经存在的子进程,使用新的配置文件启动新的子进程。)

n  执行nginx.exe –s quit:停止服务,等待子进程完成现有的请求后关闭。

 

2.2 Linux版Nginx安装

访问官方网站获取安装介质http://nginx.org/download,如下图

 

编译及安装Nginx

复制代码
编译安装基本步骤:
1.解压Nginx源码包。
2.进入Nginx解压后路径,执行./configure 定义属性和模块。(./configure编译选项很多,可以使用./configure –help进行查看。--with-xx表示默认没有安装,--without-xx表示默认已经选择安装,可以根据实际情况定义)。
3.执行make命令进行编译。
4.执行make install进行安装。
下面给出一个基于CentOS 6.4的安装过程实例:
#解决Nginx依赖关系
[root@nginx ~]# yum install zlib zlib-devel
openssl
openssl-devel
pcre
pcre-devel
#解压Nginx
[root@nginx ~]# tar zxvf nginx-1.7.12.tar.gz
#进入源码目录
[root@nginx ~]# cd nginx-1.7.12
#配置选项
[root@nginx ~]# ./configure
--with-http_ssl_module
--with-pcre
--with-http_stub_status_module
--with-http_realip_module
#执行编译指令
[root@nginx ~]#make
#执行安装指令
[root@nginx ~]#make install
复制代码

 

注意

1.出现

安装个编译器

 yum -y install gcc gcc-c++ autoconf automake make

 

2.没有prce包的话

yum -y install pcre-devel

 

3.没有zlib包的话

yum install -y zlib-devel

 

启动及停止Nginx服务

复制代码
#启动Nginx
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx
#重新加载配置文件。(关闭已经存在的子进程,使用新的配置文件启动新的子进程。)
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx -s reload
#停止服务,等待子进程完成现有的请求后关闭。
[root@nginx nginx-1.7.12]# /usr/local/nginx/sbin/nginx -s quit
复制代码

本机测试下载:

 

 

3.Nginx如何的工作

上一章介绍了如何在Windows和Linux操作系统上安装Nginx,以及如何启动、停止、重启Nginx服务。这里我们简单介绍Nginx如何工作,包含Nginx的目录结构、进程如何工作、Nginx如何处理一个请求等

 

3.1 Nginx目录结构

Windows版Nginx目录结构

进入Nginx安装目录,可以查看Nginx的目录,下图展示了Windows下Nginx的目录结构。

 

复制代码
如上图所示,Windows版Nginx安装完成后,会在安装目录生成6个目录和一个可执行文件:conf目录、contrib目录、docs目录、html目录、logs目录、temp目录和nginx的可执行文件。
1.conf目录:存放配置文件的目录,包含主配置文件nginx.conf,是我们经常修改的配置文件。
2.contrib目录:存放开源爱好者共享的代码。
3.docs目录:存放文档资料。
4.html目录:默认存放了Nginx的错误页面和欢迎页面。
5.logs目录:默认存放了访问日志、错误日志和Nginx主进程pid文件。
6.temp目录:临时目录,用于存放Nginx运行时产生的临时文件。
7.nginx.exe:可执行程序,常用于Nginx服务的启动、停止等管理工作。
复制代码

 

Linux版Nginx目录结构

进入Nginx安装目录,可以查看Nginx的目录,下图展示了Linux下Nginx的目录结构。

复制代码
如上图所示,Linux版Nginx安装完成后,会在安装目录生成9个目录:client_body_temp目录、conf目录、fastcgi_temp目录、html目录、logs目录、proxy_temp目录、sbin目录、scgi_temp目录和uwsgi_temp目录。
1.*_temp目录:共有5个temp结尾的目录,用于存放Nginx运行时产生的临时文件。
2.conf目录:存放配置文件的目录,包含主配置文件nginx.conf,是我们经常修改的配置文件。
3.html目录:默认存放了Nginx的错误页面和欢迎页面等。
4.logs目录:默认存放了访问日志和错误日志文件。
5.sbin目录:默认存放了Nginx的二进制命令,常用于Nginx服务的启动、停止等管理工作。
复制代码

 

3.2  Nginx进程如何工作

默认情况下,运行中的Nginx会包含如下进程:

主进程master process(父进程)。

子进程worker process(工作进程)。

具体情况如下图所示。

 

Nginx主进程

       Nginx主进程充当监控进程,而由主进程生成的子进程则充当工作进程。主进程充当整个进程组与管理用户的交互接口,同时对进程进行监护。它不需要处理网络事件,不负责业务执行,只会通过管理worker进程来实现重启服务、关闭服务、配置文件生效等功能。

Nginx子进程

       Nginx子进程充当工作进程,负责完成具体的任务。子进程主要负责完成用户请求接收与返回用户数据,以及与后端应用服务器的数据交互等工作。

 Nginx如何处理一个请求

       Nginx收到到一个请求后,它会依据如下步骤处理:

       首先,根据http请求的“Host”头以决定由哪个虚拟机处理请求;然后,匹配请求的URI,并根据URI定义规则返回数据。

 

4.如何配置Linux下Nginx

 

4.1.1配置Nginx代理HTTP请求到Tomcat

1.准备好tomcat1

 

2.修改

复制代码
#user
nobody;
worker_processes
1;
#error_log
logs/error.log;
#error_log
logs/error.log
notice;
#error_log
logs/error.log
info;
#pid
logs/nginx.pid;
events {
worker_connections
1024;
}
http {
include
mime.types;
default_type
application/octet-stream;
#log_format
main
'$remote_addr - $remote_user [$time_local] "$request" '
#
'$status $body_bytes_sent "$http_referer" '
#
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log
logs/access.log
main;
sendfile
on;
#tcp_nopush
on;
#keepalive_timeout
0;
keepalive_timeout
65;
#gzip
on;
server {
listen
80;
server_name
localhost;

location / {
proxy_pass http://127.0.0.1:8080/test/;
proxy_set_header Host
$http_host;
proxy_set_header X-Real-IP
$remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
复制代码

 

当访问时候发现跳转到tomcat那里

 

4.1.2配置Nginx负载均衡代理请求到Tomcat

1.准备,在同一服务器启动两个tomcat,不同端口

本文已经tomcat7为例

修改tomcat1的server.xml如下

复制代码
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost"
appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>
复制代码

 

修改tomcat2的server.xml如下

复制代码
<?xml version='1.0' encoding='utf-8'?>
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost"
appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>
复制代码

 

仔细观看有3个地方不一样

<Server port="8005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /> 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 

启动后发现

 

2.修改nginx.conf配置

复制代码
#user
nobody;
worker_processes
1;
#error_log
logs/error.log;
#error_log
logs/error.log
notice;
#error_log
logs/error.log
info;
#pid
logs/nginx.pid;
events {
worker_connections
1024;
}
http {
include
mime.types;
default_type
application/octet-stream;
#log_format
main
'$remote_addr - $remote_user [$time_local] "$request" '
#
'$status $body_bytes_sent "$http_referer" '
#
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log
logs/access.log
main;
sendfile
on;
#tcp_nopush
on;
#keepalive_timeout
0;
keepalive_timeout
65;
#gzip
on;

upstream test {
server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=5s;
server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=5s;
}
server {
listen
80;
server_name
localhost;
#charset koi8-r;
#access_log
logs/host.access.log
main;
location / {
proxy_pass http://test/test/;
proxy_set_header Host
$http_host;
proxy_set_header X-Real-IP
$remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#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
html;
}
}
}
复制代码

 

解释

复制代码
upstream test {
#定义一个负载均衡,后面可以使用proxy调用。
server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=5s;
server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=5s;
#定义负载均衡的web后端服务器,负载均衡策略默认是轮询,max_fails最大失败次数3,weight定义权值
#fail_timeout统计失败尝试次数,在5s内尝试失败3次,则认为不可用。将该服务器标记不可用
}
#定义代理到后端tomcat的examples应用
proxy_pass http://test/test;
复制代码

 

 

 

重新加载

 

访问试试

再访问

 

成功


最后

以上就是深情芝麻为你收集整理的Nginx入门教程(简介,安装,启动)1 Nginx简介2.Nginx安装与控制指令3.Nginx如何的工作4.如何配置Linux下Nginx的全部内容,希望文章能够帮你解决Nginx入门教程(简介,安装,启动)1 Nginx简介2.Nginx安装与控制指令3.Nginx如何的工作4.如何配置Linux下Nginx所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部