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 ("@R_607_10846@ne 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'

强制停止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文件

 
   
  
  
   
  
   
  
   
   
   

<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_171_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 @R_607_10846@ne represents the entry point (within Catalina) that processes
     every request.  The @R_607_10846@ne 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>/@R_607_10846@ne.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 :
<@R_607_10846@ne 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;@R_607_10846@ne </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;@R_607_10846@ne</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,请注明来意。
标签: