nginx使用

nginx使用

一直在用nginx,现在普遍的服务端代理都是用的nginx吧,只有用过了才能体会到它的方便,高效

安装过程就不写在这里了,可以参考zhuanlan.zhihu.com/p/83890573

常用命令

  • nginx -t
  • nginx -s reload

nginx -t 的作用是检查我们的配置文件是否正确,如果正确的话看到的提示应该是这样的

image-9 nginx使用
正确配置下的提示

否则会有很多种错误的情形,比如下面这种

image-10 nginx使用
配置不正确

nginx -s reload 的作用是重新加载配置文件,基本上速度在毫秒级别,由于反应很快,所以在生产环境上使用很普遍.比如系统升级可以先指向一个带提示的静态页面,等升级完成了再指向回我们的业务系统,也可以在不同的应用之间切换,路由切换等.

那么怎么进行nginx配置?

通过nginx -t我们可以找到nginx的安装目录

image-11 nginx使用

重要的是图中标红的文件,通过vim nginx.conf来查看配置信息

image-12 nginx使用

上面的每个属性都代表不同的配置信息,这里先跳过,后面也只讲常用的,其他的可以去官网查询详细作用,注意图上红色方框内的路径,这个表示的是我们详细的配置文件目录,这样的好处是我们可以根据业务分开放在该目录下不同的文件来管理我们的nginx路由等信息,不设置这个目录的话也是可以的,都写在一个文件不方便管理而已.比如我现在的conf.d/目录下的配置文件列表有这些

image-13 nginx使用
只有红框中的是有效配置

随便看一个文件的配置内容

image-14 nginx使用
edu-ui.conf的配置内容
  • listen:表示外部访问该服务器的端口
  • server_name:表示外部访问该服务器的域名,ip,这里可以多个,空格隔开就行
  • location:表示需要访问的匹配上的地址才能转发
  • proxy_pass:表示要代理到服务器上的哪个应用路径

上面列出了4个基本服务配置,有了这几个配置,我们的服务器对外访问基本就可以了,

本机启动了2个应用服务比如端口8080对应A应用,8081对应B应用

如果想外部通过www.xxx.com/a访问的是A应用,而www.xxx.com/b访问的是B应用

那么配置方式

server{
    listen    80;
    server_name   xxx.com;

    location ^~ /a/ {
        proxy_pass http://127.0.0.1:8080;
        # WebScoket Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Origin *;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header Host $http_host;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-NginX-Proxy true;
    }


    location ^~ /b/ {
        proxy_pass http://127.0.0.1:8081;
        # WebScoket Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Origin *;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header Host $http_host;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-NginX-Proxy true;
    }
}

配置完成后nginx -t检查没问题后nginx -s reload执行重新加载就可以生效.生效后尝试对应的访问就可以请求到不同的应用

基本使用ok了,就尝试一些其他参数配置,比如我们的一次网路请求通常带有请求头header,和内容body,其中有些参数就可以限制这些参数的内容大小,当然我们还可以在请求中添加默认的参数

client_max_body_size 500m;
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

有了nginx后我们可以很方便的将请求在内网不同服务器之间转发,降低某些服务器的压力