Nginx使用

Nginx使用

 

1、正向代理与反向代理

 

 Nginx使用

 

图解:

在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;

在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;

理解:

正向代理,就好比我们设置代理服务器一样,我们要向服务器A请求资源,实际上我们是把请求抛给代理服务器,由代理服务器去请求服务器A的资源,也就是说,对客户端而言,给他们的资源访问提供了一个统一的出口,这样服务器A就不知道是哪个客户端的请求了

反向代理,相对服务端而言,为请求的访问提供了一个统一的入口,也就是说客户端只要向这个代理服务器发送请求,而代理服务器对这些请求转发而目标服务器,这样客户端就不知道到底访问的是哪个服务器了

正向代理和反向代理一个区别就是:正向代理明确的告诉代理服务器要访问哪个地址,而反向代理则是只需要访问到需要的资源就可以了,其它的不需要关注

 

2、项目场景

 

 Nginx使用

 

图解:

正常一个项目在使用过程中,通常都是正向与反向一起使用的

 

3、Nginx安装

CentOS:sudo yum install nginx

Ubuntu:sudo apt install nginx

 

也可以使用安装包安装:https://www.cnblogs.com/shanfeng1000/p/11063851.html

 

4、Nginx常用命令

 

nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

nginx -s stop :快速停止nginx
nginx -s quit :完整有序的停止nginx

 

具体的命令可以通过:nginx -h 查看

 

5、Nginx配置详解

参考博客:https://www.cnblogs.com/bluestorm/p/4574688.html

 

Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。

main部分设置的指令将影响其它所有部分的设置;

server部分的指令主要用于指定虚拟主机域名、IP和端口;

upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;

location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等)。他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

 

首先,输入nginx -h 可以nginx命令,另外,可以看到nginx的配置文件的路径:

 Nginx使用

 

打开这个conf文件(vim /etc/nginx/nginx.conf),

 Nginx使用

 

Nginx启动会读取这个配置文件,当然,我们如果在启动时使用-c参数指定,那就是读取指定的配置文件了,最外围就是main配置,也就是全局配置,比如上面的worker_processes auto就是worker进程数的配置,http就是http服务器的配置,比如是否使用keepalive啊,是否使用gzip进行压缩等都是这个节点配置,而且这个也是我们常用的配置,我们配置server节点等等都是配置在这个里面,但是我们一般不会在nginx.conf中配置server节点,因为http节点可以使用include指令,server节点都被配置在其它文件中,如图:

 Nginx使用

 

也就是说,/etc/nginx/conf.d目录下的所有以.conf结尾的文件,/etc/nginx/sites-enabled下的所有文件都被视为http节点的配置文件,所以我们可以再这两个文件中配置server节点,可以打开这个目录下面的内容,打开其中的默认文件查看server节点和location节点的配置,其中很多配置应该都是一看就明白的

 

Server配置详解:

上面说到/etc/nginx/conf.d目录下的所有.conf文件都会被认为是http节点的配置,那么我们可以在/etc/nginx/conf.d中创建一个example.conf,然后打开输入:

server {

       listen 88;  #监听主机的88端口,如果端口小于1024可能涉及权限问题

       listen [::]:88;  #监听主机的88端口

       server_name example;  #当前服务器的名称

 

       root /var/www/example;   #当前服务器的根路径

       index index.html index.htm index.nginx-debian.html;   #起始页

 

       location / {          #路由配置规则,匹配上就使用里面的配置

               root /var/www/example;   #根路径

               index index.html index.htm index.nginx-debian.html;   #起始页

       }

location = /test {                #路由配置规则,匹配上就使用里面的配置

               root /var/www/example/test;   #根路径

               index index.html index.htm index.nginx-debian.html;   #起始页

       }

}

 Nginx使用

 

 

上面的配置是说(当前主机IP:192.168.182.134),监听主机的88端口,当访问请求时http://192.168.182.134:88/时,使用/var/www/example做根路径,当请求是http://192.168.182.134:88/test时使用/var/www/example/test做更路径,所以我们分别创建/var/www/example和/var/www/example/test两个目录,在里面创建一个index.html文件,内容分别是:

/var/www/example/index.html

 Nginx使用

 

 

/var/www/example/test/index.html

 

 Nginx使用

 

 

然后可以启动nginx,然后测试一下了

先测试配置是否有问题:sudo nginx -t

如果提示:

nginx: could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)

则是权限不够,干脆将nginx目录的所有人改一下:sudo chown -R feng:feng /etc/nginx

测试没问题后就可以启动了:sudo nginx

 Nginx使用

 

然后就可以在浏览器输入地址访问了:

http://192.168.182.134:88/index.html

http://192.168.182.134:88/test/index.html

 

负载均衡配置:

在/etc/nginx/conf.d目录下新建一个balance.conf,输入一下内容:

 

upstream balance_test {

        server 172.16.3.212;  #我本地的IP地址

        server 172.16.201.27;  #27预生产环境

        ip_hash;  #使用负载均衡的IP哈希规则

}

 

 

server {

       listen 89;  #监听主机的89端口,如果端口小于1024可能涉及权限问题

       listen [::]:89;  #监听主机的89端口

       server_name balance;  #当前服务器的名称

 

       root /var/www/balance;   #当前服务器的根路径

       index index.html index.htm index.nginx-debian.html;   #起始页

 

       location /Tfs.Loan.Web {    #虚拟路径是这个的时候,为贷后

                proxy_pass http://balance_test;    #这里的balance_test就是指上面的upstream中的一个,到底取哪个就看情况了,下面是代理服务器的配置

                proxy_http_version 1.1;

                proxy_set_header Upgrade $http_upgrade;

                proxy_set_header Connection keep-alive;

                proxy_set_header Host $host;

                proxy_set_header   X-Real-IP        $remote_addr;

                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                proxy_cache_bypass $http_upgrade;

                # First attempt to serve request as file, then

                # as directory, then fall back to displaying a 404.

                #try_files $uri $uri/ =404;

        }

      

       location ~ .*\.(js|css|svg|ico|png)$ {   #静态文件

                proxy_pass http://balance_test;      #这里的balance_test就是指上面的upstream中的一个,到底取哪个就看情况了

        }

 

}

 

 Nginx使用

 

然后按照上面启动nginx的方式启动就可以了,如果之前以启动,那么只需要使用以下命令重新加载配置就可以了:sudo nginx -s reload

打开浏览器访问:http://192.168.182.134:89/Tfs.Loan.Web

 

 

Location配置详解:

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

 

附:

一个很常见的错误:

当执行nginx -s stop后,在执行nginx -s reload或者nginx -s reopen ,会提示nginx.pid文件找不到:

 Nginx使用

 

这个nginx是因为nginx的主进程被关闭了,只需要重启主进程就可以了,执行:sudo nginx

 Nginx使用

 

转载于:https://www.cnblogs.com/xhhgo/p/11127492.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100827.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 等价类划分法三角形测试用例_三角形等价类划分

    等价类划分法三角形测试用例_三角形等价类划分测试用例实例--三角形用例设计测试一个图形是不是三角形,需考虑到三角形的性质要求。除了满足ABC均是整数且大于0,还需满足A>0,B>0,C>0,且A+B>C,B+C>A,A+C>B。如果是等腰的,还要判断A=B,或B=C,或A=C。如果是等边的,则需判断是否A=B,且B=C,且A=C。输入条件有效等价类无效等价类

    2022年10月17日
    2
  • Java与Python哪个更好?「建议收藏」

    Java与Python哪个更好?「建议收藏」一些开发人员声称Python比Java更有生产力。但更应先说明的是:Python和Java有什么区别?PythonvsJava            Java是一个典型化的编程语言,这意味着变量名必须显示声明。相比之下,我们有动态类型的Python,它不需要声明变量。对于编程语言的动态和静态类型有很多争论。不过请注意这样一个特征:Python是一个有着简单句法的多样性的语…

    2022年7月7日
    24
  • CAS算法的理解及应用「建议收藏」

    CAS算法的理解及应用「建议收藏」应用原子操作类,例如AtomicInteger,AtomicBoolean …适用于并发量较小,多cpu情况下;Java中有许多线程安全类,比如线程安全的集合类。从Java5开始,在java.util.concurrent包下提供了大量支持高效并发访问的集合接口和实现类。如:ConcurrentMap、ConcurrentLinkedQueue等线程安全集合。引入问题那么问题来了,这些线程安全类的底层是怎么保证线程安全的,你可能会想到是不是使用同步代码锁synchronized?引入概念这些线

    2022年8月9日
    7
  • 地理加权回归学习记录「建议收藏」

    地理加权回归学习记录「建议收藏」地理加权回归GWR白话空间统计二十四:地理加权回归(三)地理加权回归可以用来量化空间异质性。研究区域——利用每个要素的不同空间位置计算距离衰减函数——把每个要素的空间位置(一般是坐标信息(x,y))和要素的值带入到这个函数里面之后,就可以得到一个权重值,这个值就可以带入到回归方程里面去这个衰减函数的理论基础,正是Tobler提出所谓的“地理学第一定律(Tobler’sFirstLaw或者Tobler’sFirstLawofGeography):位置越接近的数据,比远处的数据对结果的影响更

    2022年9月28日
    3
  • pycharm怎么设置编码格式_python3设置编码为utf8

    pycharm怎么设置编码格式_python3设置编码为utf81、打开要设置的文件;2、左上角file中的Settings…3、看下图,选中Editor的FileEncodings,然后在右边选择你想要的的编码格式

    2022年8月26日
    7
  • 硕士论文计算机要求,计算机硕士论文格式要求

    硕士论文计算机要求,计算机硕士论文格式要求

    2021年11月27日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号