Nginx   发布时间:2022-05-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

 一、什么是正向代理、什么是反向代理

1. 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

访问google使用代理服务器

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

2. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

代理访问自己的内部服务器

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

二、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对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高

1. 什么是Nginx

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

 常见的应用服务器:     Apache/Microsoft IIS/tomcat/Lighttpd/Nginx

2. Nginx的特点和组成

特点:Nginx特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好

组成:Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单

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

3. Nginx的优点

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

静态文件是Nginx最主要的功能

4. Nginx安装

4.1、编译环境gcc g++ 开发库之类的需要提前装好

  

4.2、首先安装PCRE  pcre功能是让Nginx有rewrite功能

        检查系统里是否安装了pcre软件

    rpm -qa pcre   如果没有显示说明没有安装  反之安装过

    rpm -e --nodeps pcre  删除pcre

  安装pcre:yum install pcre-devel pcre -y

4.3、Nginx安装

#下载Nginx源码包

cd /usr/localwget http://Nginx.org/download/Nginx-1.9.0.tar.gz

#解压Nginx源码包

tar -zxvf Nginx-1.9.0.tar.gz

#进入解压目录,开始安装,默认安装地址 /usr/local/Nginx

cd Nginx-1.9.0./configure --prefix=/usr/local/Nginx --with-http_ssl_module &&make &&make install

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

#自此Nginx安装完毕检查Nginx配置文件是否正确,返回OK即正确。/usr/local/Nginx/sbin/Nginx -t

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

#然后启动Nginx,/usr/local/Nginx/sbin/Nginx 回车即可。#查看进程是否已启动:ps aux |grep Nginx

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

4.4 页面访问

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

4.5 卸载Nginx

  删除Nginx文件即可

  rm -rf /usr/local/Nginx

三、Nginx常用命令和升级

1. Nginx常用命令

查看Nginx进程:ps -ef|grep Nginx或者ps aux |grep Nginx说明:Nginx的进程由主进程和工作进程组成。

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

启动Nginx:/usr/local/Nginx/sbin/Nginx说明:启动结果显示Nginx的主线程和工作线程,工作线程的数量跟Nginx.conf中的配置参数worker_processes有关。

平滑启动Nginx:kill -HUP 'cat /var/run/Nginx.pid' 或者/usr/local/Nginx/sbin/Nginx -s reload其中进程文件路径在配置文件Nginx.conf中可以找到。平滑启动的意思是在不停止Nginx的情况下,重启Nginx,重新加载配置文件,启动新的工作线程,完美停止旧的工作线程。

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

完美停止Nginx:kill -QUIT 'cat /var/run/Nginx.pid'

快速停止Nginx :kill -TERM 'cat /var/run/Nginx.pid'或者kill -INT `cat /var/run/Nginx.pid`完美停止工作进程(主要用于平滑升级):kill -WINCH 'cat /var/run/Nginx.pid'

@R_874_9974@Nginx:pkill -9 Nginx

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

检查对Nginx.conf文件的修改是否正确:Nginx -t -c /etc/Nginx/Nginx.conf 或者 /usr/local/Nginx/sbin/Nginx -t

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

停止Nginx的命令:/usr/local/Nginx/sbin/Nginx -s stop

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

查看Nginx的版本信息:/usr/local/Nginx/sbin/Nginx -v

查看完整的Nginx的配置信息:/usr/local/Nginx/sbin/Nginx -V

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

2. Nginx升级

下载所需版本的Nginx:wget http://www.Nginx.org/download/Nginx-1.4.2.tar.gz

获取旧版本Nginx的configure选项:/usr/local/Nginx/sbin/Nginx -V 编译新版本的Nginxtar -xvf Nginx-1.4.2.tar.gz cd Nginx-1.4.2 ./configure --prefix=/usr/local/Nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module make

备份旧版本的Nginx可执行文件,复制新版本的Nginx可执行文件:mv /usr/local/Nginx/sbin/Nginx /usr/local/Nginx/sbin/Nginx.old cp objs/Nginx /usr/local/Nginx/sbin/

测试新版本Nginx是否正常:/usr/local/Nginx/sbin/Nginx -t

平滑重启升级Nginx:kill –USR2 `cat /usr/local/Nginx/log/Nginx.pid` 旧版本Nginx的pid变为oldbin,这是旧版本和新版本的Nginx同时运行,过一段时间等旧Nginx处理完用户请求后,执行下面操作从容关闭旧版本的Nginx进程kill -WINCH `cat /usr/local/Nginx/log/Nginx.oldbin`

决定是否升级到新版的Nginx:kill –HUP `cat /usr/local/Nginx/log/Nginx.oldbin` ##Nginx在不重载配置文件启动工作进程 kill –QUIT `cat /usr/local/Nginx/log/Nginx.oldbin` ##关闭旧版Nginx 验证Nginx是否升级成功/usr/local/Nginx/sbin/Nginx –V ###显示下图则升级成功

 

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

四、搭建Nginx负载均衡

1. Nginx负载均衡原理图

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

说明:

在Nginx的Nginx.conf里面监听80端口,并配置后端tomcat的地址,前端访问的时候即可转发到后端的tomcat

2. 搭建步骤

2.1 准备两个端口不一样的tomcat分别为8080,8081

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

8080的server.xml文件

 
   
  
  
   
  
  @H_618_349@ 
  
   
   
   

<span style="color: #008000">
<span style="color: #0000ff"><<span style="color: #800000">GlobalNamingresources<span style="color: #0000ff">>
<span style="color: #008000">
<span style="color: #0000ff"><<span style="color: #800000">resource <span style="color: #ff0000">name<span style="color: #0000ff">="UserDatabase"<span style="color: #ff0000"> auth<span style="color: #0000ff">="Container"<span style="color: #ff0000">
type<span style="color: #0000ff">="org.apache.catalina.UserDatabase"<span style="color: #ff0000">
description<span style="color: #0000ff">="User database that can be updated and saved"<span style="color: #ff0000">
factory<span style="color: #0000ff">="org.apache.catalina.users.MemoryUserDatabaseFactory"<span style="color: #ff0000">
pathname<span style="color: #0000ff">="conf/tomcat-users.xml" <span style="color: #0000ff">/>
<span style="color: #0000ff"></<span style="color: #800000">GlobalNamingresources<span style="color: #0000ff">>

<span style="color: #008000">
<span style="color: #0000ff"><<span style="color: #800000">service <span style="color: #ff0000">name<span style="color: #0000ff">="Catalina"<span style="color: #0000ff">>

<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;The connectors can use a shared executor,you can define one or more named thread pools</span><span style="color: #008000"&gt;--></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="150" minSpareThreads="4"/&gt;
</span><span style="color: #008000"&gt;--></span>


<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java http Connector: /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/http.html (blocking &amp; non-blocking)
     Java AJP  Connector: /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/ajp.html
     APR (http/AJp) Connector: /docs/aPR.html
     Define a non-SSL http/1.1 Connector on port 8080
</span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Connector </span><span style="color: #ff0000"&gt;port</span><span style="color: #0000ff"&gt;="8080"</span><span style="color: #ff0000"&gt; protocol</span><span style="color: #0000ff"&gt;="http/1.1"</span><span style="color: #ff0000"&gt;
           connectionTimeout</span><span style="color: #0000ff"&gt;="20000"</span><span style="color: #ff0000"&gt;
           redirectPort</span><span style="color: #0000ff"&gt;="8443"</span> <span style="color: #0000ff"&gt;/></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; A "Connector" using the shared thread pool</span><span style="color: #008000"&gt;--></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;
<Connector executor="tomcatThreadPool"
           port="8080" protocol="http/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
</span><span style="color: #008000"&gt;--></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; Define a SSL http/1.1 Connector on port 8443
     This connector uses the BIO implementation that requires the JSSE
     style con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>uration. When using the APR/native implementation,the
     OpenSSL style con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>uration is <a href="http://code.js-code.com/tag/required/" target="_blank" class="keywords">required</a> as descri<a href="http://code.js-code.com/tag/bed/" target="_blank" class="keywords">bed</a> in the APR/native
     documentation </span><span style="color: #008000"&gt;--></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;
<Connector port="8443" protocol="org.apache.coyote.http11.http11Protocol"
           maxThreads="150" SSLEnabled="true" scheR_423_11845@e="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
</span><span style="color: #008000"&gt;--></span>

<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; Define an AJP 1.3 Connector on port 8009 </span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Connector </span><span style="color: #ff0000"&gt;port</span><span style="color: #0000ff"&gt;="8009"</span><span style="color: #ff0000"&gt; protocol</span><span style="color: #0000ff"&gt;="AJP/1.3"</span><span style="color: #ff0000"&gt; redirectPort</span><span style="color: #0000ff"&gt;="8443"</span> <span style="color: #0000ff"&gt;/></span>


<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; An ENGIne represents the entry point (within Catalina) that processes
     every request.  The ENGIne implementation for tomcat stand alone
     analyzes the http headers included with the request,and passes them
     on to the appropriate Host (virtual host).
     Documentation at /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/ENGIne.html </span><span style="color: #008000"&gt;--></span>

<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; You should set jvmRoute to support load-balancing via AJP ie :
<ENGIne name="Catalina" defaultHost="localhost" jvmRoute="jvm1"&gt;
</span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;ENGIne </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="Catalina"</span><span style="color: #ff0000"&gt; defaultHost</span><span style="color: #0000ff"&gt;="localhost"</span><span style="color: #0000ff"&gt;></span>

  <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;For clustering,please take a look at documentation at:
      /docs/cluster-howto.html  (simple how to)
      /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/cluster.html (reference documentation) </span><span style="color: #008000"&gt;--></span>
  <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/&gt;
  </span><span style="color: #008000"&gt;--></span>

  <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; Use the LockOutRealm to prevent attempts to guess user passwords
       via a brute-force attack </span><span style="color: #008000"&gt;--></span>
  <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Realm </span><span style="color: #ff0000"&gt;className</span><span style="color: #0000ff"&gt;="org.apache.catalina.realm.LockOutRealm"</span><span style="color: #0000ff"&gt;></span>
    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; This Realm uses the UserDatabase con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>ured in the global JNDI
         resources under the key "UserDatabase".  Any edits
         that are performed against this UserDatabase are immediately
         available for use by the Realm.  </span><span style="color: #008000"&gt;--></span>
    <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Realm </span><span style="color: #ff0000"&gt;className</span><span style="color: #0000ff"&gt;="org.apache.catalina.realm.UserDatabaseRealm"</span><span style="color: #ff0000"&gt;
           resourcename</span><span style="color: #0000ff"&gt;="UserDatabase"</span><span style="color: #0000ff"&gt;/></span>
  <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;Realm</span><span style="color: #0000ff"&gt;></span>

  <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Host </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="localhost"</span><span style="color: #ff0000"&gt;  appBase</span><span style="color: #0000ff"&gt;="webapps"</span><span style="color: #ff0000"&gt;
        unpackWARs</span><span style="color: #0000ff"&gt;="true"</span><span style="color: #ff0000"&gt; autoDeploy</span><span style="color: #0000ff"&gt;="true"</span><span style="color: #0000ff"&gt;></span>

    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; SingleSignOn valve,share authentication between web applications
         Documentation at: /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/valve.html </span><span style="color: #008000"&gt;--></span>
    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt;
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    </span><span style="color: #008000"&gt;--></span>

    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; Access log processes all example.
         Documentation at: /docs/con<a href="http://code.js-code.com/tag/fig/" target="_blank" class="keywords">fig</a>/valve.html
         Note: The pattern used is equivalent to using pattern="common" </span><span style="color: #008000"&gt;--></span>
    <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;Valve </span><span style="color: #ff0000"&gt;className</span><span style="color: #0000ff"&gt;="org.apache.catalina.valves.AccessLogValve"</span><span style="color: #ff0000"&gt; directory</span><span style="color: #0000ff"&gt;="logs"</span><span style="color: #ff0000"&gt;
           prefix</span><span style="color: #0000ff"&gt;="localhost_access_log."</span><span style="color: #ff0000"&gt; suffix</span><span style="color: #0000ff"&gt;=".txt"</span><span style="color: #ff0000"&gt;
           pattern</span><span style="color: #0000ff"&gt;="%h %l %u %t &amp;quot;<a href="http://code.js-code.com/tag/r/" target="_blank" class="keywords">%r</a>&amp;quot; <a href="http://code.js-code.com/tag/s/" target="_blank" class="keywords">%s</a> %b"</span> <span style="color: #0000ff"&gt;/></span>

  <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;Host</span><span style="color: #0000ff"&gt;></span>
<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;ENGIne</span><span style="color: #0000ff"&gt;></span>

<span style="color: #0000ff"></<span style="color: #800000">service<span style="color: #0000ff">>
<span style="color: #0000ff"></<span style="color: #800000">Server<span style="color: #0000ff">>

大佬总结

以上是大佬教程为你收集整理的Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡全部内容,希望文章能够帮你解决Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: