CentOS 7安装Nginx及配置
<p>一 nginx简述</p><div class="cnblogs_code">
<pre> Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具有占有内存少,稳定性高等优势。**它最常的用途是提供反向代理服务。**<br> - 负载均衡 -</pre>
</div>
<p> </p>
<p>二 安装nginx步骤(建议下述安装过程全程root)</p>
<p>0 概数</p>
<div class="cnblogs_code">
<pre>在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,**以下命令均需root权限执行**<span style="color: rgba(0, 0, 0, 1)">:
首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。选定</span>**/usr/local**为安装目录,以下具体版本号根据实际改变。</pre>
</div>
<h4 class="md-end-block md-heading"><span class="md-plain md-expand">安装gcc</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">gcc是用来编译下载下来的nginx源码</span></p>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#yum install gcc-c++</pre>
</div>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">安装pcre, pcre-devel</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。<span class="md-softbreak"> <span class="md-plain">nginx 的 http 模块使用 pcre 来解析正则表达式</span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">pcre-devel 是使用 pcre 开发的一个二次开发库。</span></p>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#yum install -y pcre pcre-devel</pre>
</div>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">安装zlib</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">zlib提供了很多压缩和解方式,nginx需要zlib对http进行gzip</span></p>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#yum install -y zlib zlib-devel</pre>
</div>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">安装openssl</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">openssl是一个安全套接字层密码库,nginx要支持https,需要使用openssl</span></p>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#yum install -y openssl openssl-devel</pre>
</div>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">下载安装nginx</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>下载nginx <span class="cm-number">1.14.0版本<br></span></span></pre>
<div class="cnblogs_code">
<pre>#wget http://nginx.org/download/nginx-1.14.0.tar.gz</pre>
</div>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span class="cm-number"><span><span class="cm-link"><span><span><br><span><span class="cm-comment">***如果wget没有安装,则先执行如下命令,安装wget***<br></span></span></span></span></span></span></span></span></pre>
<div class="cnblogs_code">
<pre>#yum install -y wget</pre>
</div>
</li>
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>解压至/usr/local目录<br></span></pre>
<div class="cnblogs_code">
<pre>#tar -zxvf nginx-1.14.0.tar.gz -C/usr/local</pre>
</div>
</li>
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>编译【cd至nginx解压的目录,本文安装的目录为 /usr/local/nginx-1.14.0】<br></span></pre>
<div class="cnblogs_code">
<pre>#./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tem/nginx/client --http-proxy-temp-path=/var/tem/nginx/proxy --http-fastcgi-temp-path=/var/tem/nginx/fcgi --with-http_stub_status_module</pre>
</div>
</li>
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>安装<br></span></pre>
<div class="cnblogs_code">
<pre>#make && make install</pre>
</div>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">Nginx安装中报错</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">ngxin安装报错一</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>nginx: getpwnam(<span class="cm-string">"nginx<span class="cm-string">") failed</span></span></span></pre>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">解决方案:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>原因:由于编译时做了账户安全控制,引发安装时报错</span></pre>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#useradd -s /usr/sbin/nologin -M nginx</pre>
</div>
</li>
</ul>
</li>
</ul>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">ngxin安装报错二</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>nginx: mkdir() <span class="cm-string">"/var/tem/nginx/client<span class="cm-string">" failed (2: No such file or directory)</span></span></span></pre>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">解决方案:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>原因:缺少必要文件,注意,报错中明确目录文件,请安装报错提示来执行手动创建的文件</span></pre>
</li>
<li class="md-list-item">
<div class="cnblogs_code">
<pre>#mkdir -p /var/tem/nginx/client</pre>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 class="md-end-block md-heading"><span class="md-plain">启动nginx</span></h4>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">如果刚刚完成安装,尚未配置nginx环境变量的话</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">nginx启动目录为:/usr/sbin/nginx</span></p>
</li>
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>启动nginx指令<br></span></pre>
<div class="cnblogs_code">
<pre>#/usr/sbin/nginx</pre>
</div>
</li>
<li class="md-list-item">
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span>检查启动进程<br></span></pre>
<div class="cnblogs_code">
<pre>#netstat -anp |grep nginx</pre>
</div>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span><span><img src="https://img2020.cnblogs.com/blog/1404616/202010/1404616-20201030201201687-911235822.png" alt="" width="691" height="72" loading="lazy"> </span></span></span></pre>
</li>
</ul>
<ul class="ul-list" data-mark="-">
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain md-expand">检查nginx启动页面【如果页面打不开,可能是centos系统防火墙没有关闭,"#systemctl stop firewalld"】</span></p>
</li>
<li class="md-list-item md-focus-container"><span class="md-plain md-expand"><span class="md-plain md-expand"><span class="md-plain md-expand"><img src="https://img2020.cnblogs.com/blog/1404616/202010/1404616-20201030201304977-1053384084.png" alt="" width="524" height="157" loading="lazy"></span></span></span>
<p> </p>
<p> </p>
</li>
</ul>
<p>三 nginx基本操作命令</p>
<p>1 启动nginx服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> /usr/local/nginx/sbin/nginx</span></pre>
</div>
<p> </p>
<p>2 重启nginx服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> /usr/local/nginx/sbin/nginx –s reload</span></pre>
</div>
<p> </p>
<p>3 停止nginx服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> /usr/local/nginx/sbin/nginx –s stop</span></pre>
</div>
<p> </p>
<p>4 强制关闭nginx服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> pkill nginx</span></pre>
</div>
<p> </p>
<p>5 检查nginx配置</p>
<div class="cnblogs_code">
<pre># nginx -t </pre>
</div>
<p> </p>
<p>四 nginx正反向代理基本配置</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_35322124-0042-4cb6-a650-550d2e898aa1" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_35322124-0042-4cb6-a650-550d2e898aa1" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_35322124-0042-4cb6-a650-550d2e898aa1" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">#nginx配置
#usernobody;
worker_processes</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">; #服务器并发处理服务关键配置
#error_loglogs</span>/<span style="color: rgba(0, 0, 0, 1)">error.log;
#error_loglogs</span>/<span style="color: rgba(0, 0, 0, 1)">error.lognotice;
#error_loglogs</span>/error.log<span style="color: rgba(0, 0, 255, 1)">info</span><span style="color: rgba(0, 0, 0, 1)">;
#pid logs</span>/<span style="color: rgba(0, 0, 0, 1)">nginx.pid;
events {
worker_connections</span><span style="color: rgba(128, 0, 128, 1)">1024</span>; #最大连接数为 <span style="color: rgba(128, 0, 128, 1)">1024</span><span style="color: rgba(0, 0, 0, 1)">.
}
http {
log_formatmain</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$remote_addr - $remote_user [$time_local] "$request" </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$status $body_bytes_sent "$http_referer" </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">"$http_user_agent" "$http_x_forwarded_for"</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
include mime.types;
default_typeapplication</span>/octet-<span style="color: rgba(0, 0, 0, 1)">stream;
sendfile on;
tcp_nopush on;
keepalive_timeout</span><span style="color: rgba(128, 0, 128, 1)">65</span><span style="color: rgba(0, 0, 0, 1)">;
#</span><span style="color: rgba(0, 0, 255, 1)">gzip</span><span style="color: rgba(0, 0, 0, 1)">on;#http头压缩
#正向代理配置
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">8080</span><span style="color: rgba(0, 0, 0, 1)">;# 代理监听端口
resolver </span><span style="color: rgba(128, 0, 128, 1)">223.5</span>.<span style="color: rgba(128, 0, 128, 1)">5.5</span><span style="color: rgba(0, 0, 0, 1)">; #代理DNS配置
#charset koi8</span>-<span style="color: rgba(0, 0, 0, 1)">r;
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">fproxy.access.log;#accesslog输出路径
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">fproxy.error.log; #errorlog输出路径
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass $scheme:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">$host$request_uri; # 配置正向代理参数</span>
proxy_set_header Host $http_host; # 解决如果URL中带<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">后Nginx 503错误
proxy_buffers </span><span style="color: rgba(128, 0, 128, 1)">256</span><span style="color: rgba(0, 0, 0, 1)"> 4k; # 配置缓存大小
proxy_max_temp_file_size </span><span style="color: rgba(128, 0, 128, 1)">0</span>; # 关闭磁盘缓存读写减少I/<span style="color: rgba(0, 0, 0, 1)">O
proxy_connect_timeout </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">; # 代理连接超时时间
# 配置代理服务器HTTP状态缓存时间
proxy_cache_valid </span><span style="color: rgba(128, 0, 128, 1)">200</span> <span style="color: rgba(128, 0, 128, 1)">302</span><span style="color: rgba(0, 0, 0, 1)"> 10m;
proxy_cache_valid </span><span style="color: rgba(128, 0, 128, 1)">301</span><span style="color: rgba(0, 0, 0, 1)"> 1h;
proxy_cache_valid any 1m;
}
}
#反向代理配置
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
server_nametest.fw.com; #代理转发域名配置
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy.access.log;
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy.error.log;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">10.60.221.22:8001; #代理到后段实际应用服务器地址</span>
<span style="color: rgba(0, 0, 0, 1)"> indexindex.html index.htm index.jsp;
}
#error_page</span><span style="color: rgba(128, 0, 128, 1)">404</span> /<span style="color: rgba(128, 0, 128, 1)">404</span><span style="color: rgba(0, 0, 0, 1)">.html;
# redirect server error pages to the static page </span>/<span style="color: rgba(0, 0, 0, 1)">50x.html
error_page </span><span style="color: rgba(128, 0, 128, 1)">500</span> <span style="color: rgba(128, 0, 128, 1)">502</span> <span style="color: rgba(128, 0, 128, 1)">503</span> <span style="color: rgba(128, 0, 128, 1)">504</span>/<span style="color: rgba(0, 0, 0, 1)">50x.html;
location </span>= /<span style="color: rgba(0, 0, 0, 1)">50x.html {
root html;
}
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">nginx.conf</span></div>
<p> </p>
<p> </p>
<p>五 nginx配置参数介绍</p>
<p>1 listen</p>
<p>1.1 配置监听的ip地址</p>
<div class="cnblogs_code">
<pre>listen address[:port] ;</pre>
</div>
<p> </p>
<p>1.2 配置监听端口</p>
<div class="cnblogs_code">
<pre>listen port ;</pre>
</div>
<p> </p>
<p>1.3 配置Unix Domain Socket</p>
<div class="cnblogs_code">
<pre>listen unix:path ;</pre>
</div>
<p> </p>
<p>1.4 监听配置用法</p>
<div class="cnblogs_code">
<pre>listen *:<span style="color: rgba(128, 0, 128, 1)">80</span> | *:<span style="color: rgba(128, 0, 128, 1)">8080</span><span style="color: rgba(0, 0, 0, 1)"> #监听所有80端口和8080端口
listenIP_address:port #监听指定的地址和端口号
listenIP_address #监听指定ip地址所有端口
listen port #监听该端口的所有IP连接</span></pre>
</div>
<p> </p>
<p>1.5 参数解释</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_9529fb43-f5e5-4e35-a947-4dc172f69671" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_9529fb43-f5e5-4e35-a947-4dc172f69671" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_9529fb43-f5e5-4e35-a947-4dc172f69671" class="cnblogs_code_hide">
<pre>- address:IP地址,如果是 IPV6地址,需要使用中括号[] 括起来,比如等。
</span>-<span style="color: rgba(0, 0, 0, 1)"> port:端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口。
</span>- path:socket文件路径,如 var/run/<span style="color: rgba(0, 0, 0, 1)">nginx.sock等。
</span>- default_server:标识符,将此虚拟主机设置为 address:port 的默认主机。(在 nginx-<span style="color: rgba(128, 0, 128, 1)">0.8</span><span style="color: rgba(0, 0, 0, 1)">.21之前使用的是default指令)
</span>- setfib=number:Nginx-<span style="color: rgba(128, 0, 128, 1)">0.8</span>.<span style="color: rgba(128, 0, 128, 1)">44</span><span style="color: rgba(0, 0, 0, 1)"> 中使用这个变量监听 socket 关联路由表,目前只对 FreeBSD 起作用,不常用。
</span>- backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,其他平台默认为511.
</span>- rcvbuf=<span style="color: rgba(0, 0, 0, 1)">size:设置监听socket接收缓存区大小。
</span>- sndbuf=<span style="color: rgba(0, 0, 0, 1)">size:设置监听socket发送缓存区大小。
</span>-<span style="color: rgba(0, 0, 0, 1)"> deferred:标识符,将accept()设置为Deferred模式。
</span>- accept_filter=filter:设置监听端口对所有请求进行过滤,被过滤的内容不能被接收和处理,本指令只在 FreeBSD 和 NetBSD <span style="color: rgba(128, 0, 128, 1)">5.0</span>+<span style="color: rgba(0, 0, 0, 1)"> 平台下有效。filter 可以设置为 dataready 或 httpready 。
</span>-<span style="color: rgba(0, 0, 0, 1)"> bind:标识符,使用独立的bind() 处理此address:port,一般情况下,对于端口相同而IP地址不同的多个连接,Nginx 服务器将只使用一个监听指令,并使用 bind() 处理端口相同的所有连接。
</span>- ssl:标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的 HTTPS 服务有关。</pre>
</div>
<span class="cnblogs_code_collapse">参数解释</span></div>
<p> </p>
<p>2 server_name<br>该指令用于虚拟主机的配置。通常分为以下两种</p>
<p>2.1 基于名称的虚拟主机配置</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_7e92a40e-cc49-42c6-bc73-11980d773240" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_7e92a40e-cc49-42c6-bc73-11980d773240" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7e92a40e-cc49-42c6-bc73-11980d773240" class="cnblogs_code_hide">
<pre>-<span style="color: rgba(0, 0, 0, 1)"> 语法格式如下:
# server_name name ...;
</span>-<span style="color: rgba(0, 0, 0, 1)"> 对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两段或者三段组成,每段之间用“.”隔开。
# server_name </span><span style="color: rgba(128, 0, 128, 1)">123</span>.com www.<span style="color: rgba(128, 0, 128, 1)">123</span><span style="color: rgba(0, 0, 0, 1)">.com
</span>- 可以使用通配符“*<span style="color: rgba(0, 0, 0, 1)">”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。
# server_name </span>*.<span style="color: rgba(128, 0, 128, 1)">123</span>.com www.<span style="color: rgba(128, 0, 128, 1)">123</span>.*
- 还可以使用正则表达式,用“~<span style="color: rgba(0, 0, 0, 1)">”作为正则表达式字符串的开始标记。
# server_name </span>~^www\d+\.<span style="color: rgba(128, 0, 128, 1)">123</span><span style="color: rgba(0, 0, 0, 1)">\.com$;
#该表达式“</span>~”表示匹配正则表达式,以www开头(“^”表示开头),紧跟着一个0~9之间的数字,在紧跟“.<span style="color: rgba(128, 0, 128, 1)">123</span><span style="color: rgba(0, 0, 0, 1)">.co”,最后跟着“m”($表示结尾)以上匹配的顺序优先级如下:
①、准确匹配 server_name
②、通配符在开始时匹配 server_name 成功
③、通配符在结尾时匹配 server_name 成功
④、正则表达式匹配 server_name 成功</span></pre>
</div>
<span class="cnblogs_code_collapse">虚拟主机配置</span></div>
<p> </p>
<p>2.2 基于IP地址的虚拟主机配置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
server_name </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">1.1</span></pre>
</div>
<p> </p>
<p><br>3 location<br># 该指令用于匹配 URL</p>
<div class="cnblogs_code">
<pre>location [ = | ~ | ~* | ^~<span style="color: rgba(0, 0, 0, 1)">] uri {
}
</span>=<span style="color: rgba(0, 0, 0, 1)"> :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
</span>~<span style="color: rgba(0, 0, 0, 1)"> :用于表示 uri 包含正则表达式,并且区分大小写。
</span>~*<span style="color: rgba(0, 0, 0, 1)"> :用于表示 uri 包含正则表达式,并且不区分大小写。
</span>^~<span style="color: rgba(0, 0, 0, 1)"> :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 </span>~ 或者 ~* 标识。</pre>
</div>
<p> </p>
<p>4 proxy_pass<br># 该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">proxy_pass URL;
# URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。
proxy_passhttp:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">www.123.com/uri;</span></pre>
</div>
<p> </p>
<p>5 index</p>
<p># 该指令用于设置网站的默认首页。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">indexfilename ...;
# 后面的文件名称可以有多个,中间用空格隔开。
indexindex.html index.jsp;
</span><span style="color: rgba(0, 0, 255, 1)">ps</span>:通常该指令有两个作用:第一个是用户在请求访问网站时,请求地址可以不写首页名称;第二个是可以对一个请求,根据请求内容而设置不同的首页。</pre>
</div>
<p> </p>
<p>六 ngxin负载均衡</p>
<p>1 轮询算法负载均衡</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_0002851b-af2e-40f0-8a76-5d7485bf520e" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_0002851b-af2e-40f0-8a76-5d7485bf520e" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_0002851b-af2e-40f0-8a76-5d7485bf520e" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">upstream OrdinaryPolling {
server </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">1.100</span>:<span style="color: rgba(128, 0, 128, 1)">8081</span><span style="color: rgba(0, 0, 0, 1)">;
server </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">1.100</span>:<span style="color: rgba(128, 0, 128, 1)">8082</span><span style="color: rgba(0, 0, 0, 1)">;
}
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
server_nametest.fw.com;
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.access.log;
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.error.log;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">OrdinaryPolling;</span>
<span style="color: rgba(0, 0, 0, 1)"> indexindex.html index.htm index.jsp;
# deny ip
# allow ip
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">轮询算法负载均衡nginx.conf</span></div>
<p> </p>
<p>2 基于比例加权轮询负载均衡</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_7b865d2a-cd65-4d00-80f0-9c2fee2703e4" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_7b865d2a-cd65-4d00-80f0-9c2fee2703e4" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7b865d2a-cd65-4d00-80f0-9c2fee2703e4" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">upstream OrdinaryPolling {
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8081</span> weight=<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8082</span> weight=<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">;
}
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
server_nametest.fw.com;
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.access.log;
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.error.log;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">OrdinaryPolling;</span>
<span style="color: rgba(0, 0, 0, 1)"> # indexindex.html index.htm index.jsp;
# deny ip
# allow ip
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">加权轮询算法负载均衡nginx.conf</span></div>
<p> </p>
<p>3 基于IP路由负载均衡</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> 场景解释:我们知道一个请求在经过一个服务器处理时,服务器会保存相关的会话信息,比如session,但是该请求如果第一个服务器没处理完,通过nginx轮询到第二个服务器上,那么这个服务器是没有会话信息的。
最典型的一个例子:用户第一次进入一个系统是需要进行登录身份验证的,首先将请求跳转到web1应用服务器进行处理,登录信息是保存在web1应用服务器上的,这时候需要进行别的操作,那么可能会将请求轮询到web2应用服务器上,那么由于 web2没有保存会话信息,web2服务器会以为该用户没有登录,然后继续登录一次,如果有多个服务器,每次第一次访问都要进行登录,这显然是很影响用户体验的。</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">这里产生的一个问题也就是集群环境下的 session 共享,如何解决这个问题?
通常由两种方法:
</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">、第一种方法是选择一个中间件,将登录信息保存在一个中间件上,这个中间件可以为 Redis 这样的数据库。那么第一次登录,我们将session 信息保存在 Redis 中,跳转到第二个服务器时,我们可以先去Redis上查询是否有登录信息,如果有,就能直接进行登录之后的操作了,而不用进行重复登录。
</span><span style="color: rgba(128, 0, 128, 1)">2</span>、第二种方法是根据客户端的IP地址划分,每次都将同一个 IP 地址发送的请求都分发到同一个 Tomcat 服务器,那么也不会存在 session 共享的问题。</pre>
</div>
<div class="cnblogs_code">
<pre>而 nginx 的基于 IP 路由负载的机制就是上诉第二种形式。大概配置如下:</pre>
</div>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_f417ba68-2d25-4290-8506-a725b67de7ac" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_f417ba68-2d25-4290-8506-a725b67de7ac" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_f417ba68-2d25-4290-8506-a725b67de7ac" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">upstream OrdinaryPolling {
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8081</span> weight=<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8082</span> weight=<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">;
ip_hash;
}
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
server_nametest.fw.com;
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.access.log;
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.error.log;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">OrdinaryPolling;</span>
<span style="color: rgba(0, 0, 0, 1)"> # indexindex.html index.htm index.jsp;
# deny ip
# allow ip
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">基于IP路由负载均衡nginx.conf</span></div>
<div class="cnblogs_code">
<pre>注意:我们在 upstream 指令块中增加了 ip_hash 指令。该指令就是告诉 nginx 服务器,同一个 IP 地址客户端发送的请求都将分发到同一个 Tomcat 服务器进行处理。</pre>
</div>
<p> </p>
<p>4 基于服务器响应时间负载均衡</p>
<div class="cnblogs_code">
<pre>根据服务器处理请求的时间来进行负载,处理请求越快,也就是响应时间越短的优先分配。</pre>
</div>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" id="code_img_closed_dbbe0cef-06d6-4fa7-a88a-1d83205a5d88" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" id="code_img_opened_dbbe0cef-06d6-4fa7-a88a-1d83205a5d88" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_dbbe0cef-06d6-4fa7-a88a-1d83205a5d88" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">upstream OrdinaryPolling {
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8081</span> weight=<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
server </span><span style="color: rgba(128, 0, 128, 1)">10.60</span>.<span style="color: rgba(128, 0, 128, 1)">220.60</span>:<span style="color: rgba(128, 0, 128, 1)">8082</span> weight=<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">;
fair;
}
server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
server_nametest.fw.com;
access_log</span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.access.log;
error_log </span>/home/lich/logs/<span style="color: rgba(0, 0, 0, 1)">rproxy_slb.error.log;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
proxy_pass http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">OrdinaryPolling;</span>
<span style="color: rgba(0, 0, 0, 1)"> # indexindex.html index.htm index.jsp;
# deny ip
# allow ip
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">基于服务器响应时间负载均衡nginx.conf</span></div>
<p><br>5 对不同域名实现负载均衡</p>
<p>待补充</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/lich1x/p/11225528.html
頁:
[1]