nginx常见用法

这里会对nginx常见用法做一下基本介绍,其他请参考 nginx文档

概述

ngnix
是一个服务器,可以用来做

  • http服务器
  • http反向代理服务器
  • mail代理服务器
  • tcp/udp代理服务器

基本用法

这里假定已经 下载
完。

nginx有主进程和一些工作进程,主进程负责读取和计算配置以及维护工作进程,工作进程处理真正的请求,配置文件默认为 /etc/nginx/nginx.conf

启动、停止和重启

相关操作要使用以下语法

nginx -s signal
复制代码

其中signal可取

  • stop 强制立刻停止
  • quit 停止但是要等当前的请求处理完
  • reload 重启
  • reopen 重新打开日志记录,可用于旧日志文件移走后,重新生成日志文件

配置文件的结构

nginx包含很多模块,我们可以使用配置文件中的指令进行控制。

一个简单的指令包含空格分开的name和参数,最后加一个分号。

一个块指令(block directive)和一个简单指令类似,但是结尾的不是分号而是一个花括号,如果在花括号中有其他指令,则被称为一个上下文(context),比如 events, http, server, and location。任何上下文之外的地方被认为是主上下文(main context),其中events and http指令在主上下文,server 在http上下文,location在server上下文。

井号后的内容被认为是注释。

静态资源服务

web服务器可以用来提供静态资源访问,可以根据请求来访问不同路径, 比如在http上下文添加以下配置

server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
复制代码

location块指令的参数进行匹配,如果一个请求能匹配到多个路径则以最长的为准。

比如请求 /
就会匹配第一个,去 /data/www/
获取资源,请求 /images/
就会匹配第二个,到 /data/images/
中获取资源。

代理服务器

代理服务器是一个服务器,当收到请求,会把请求发到被代理的服务器,然后将获取的请求发送给客户端。

我们这里做一个简单的代理服务器,接收80端口的请求,其中图片使用本地目录,其他请求发送到8080端口。

在配置文件中使用两个server块指令,第一个监听80端口,对于图片我们使用正则检查相关后缀,正则前面要使用 ~

server {
location / {
proxy_pass http://localhost:8080;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
复制代码

另一个监听8080端口,在这里server上下文中包含root字段,当location上下文中没有root参数时会默认使用这个。

server {
listen 8080;
root /data/up1;
location / {
}
}
复制代码

nginx怎么处理一个请求

基于name的虚拟服务器

我们可以配置三个监听80端口的虚拟服务器

server {
listen      80;
server_name example.org www.example.org;
...
}
server {
listen      80;
server_name example.net www.example.net;
...
}
server {
listen      80;
server_name example.com www.example.com;
...
}
复制代码

这个配置会对请求header中的host字段进行路由,如果没有匹配到,就会路由到默认服务器,默认服务器是第一个,也可以通过参数default_server指定

server {
listen      80 default_server;
server_name example.net www.example.net;
...
}
复制代码

如果不允许没有host字段的请求访问,则可以采用以下配置关闭连接,其中空字符的name可以对其进行匹配

server {
listen      80;
server_name "";
return      444;
}
复制代码

这里的server_name可以使用以下形式表示

*.example.org
mail.*

使用http负载均衡

跨多个应用实例的负载均衡通常用于优化资源利用、最大化吞吐量、减少延迟和容错。

我们可以使用nginx作为一个有效的负载均衡器来将流量分配到多个应用服务器,来提高性能、稳定性和可靠性。

nginx负载均衡的方法有三种

  • round-robin 将请求轮流分配
  • least-connected 将请求分配给最小序号的活跃连接
  • 基于client的ip对应的hash值进行分配,这样可以保证同一个请求被同一个服务器处理

最简单的配置这样的

http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
复制代码

默认round-robin,如果要使用least-connected或ip_hash则在服务器组中添加指令

upstream myapp1 {
least_conn;#或ip_hash
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
复制代码

配置https

需要添加ssl参数(http2参数可以开启http2),和指定相关证书和私钥

server {
listen              443 ssl http2;
server_name         www.example.com;
ssl_certificate     www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
}
复制代码

为了将http请求转发给https所以,要把80端口的数据转发到https

server {
listen       80;
rewrite ^(.*)$ https://$host$1
}
复制代码

添加header

可以在 http, server, location上下文使用 add_header
添加响应header,语法

add_header name value [always];
复制代码

比如

location / {
add_header    Cache-Control 0;
}
复制代码

完结

稀土掘金
我还没有学会写个人说明!
上一篇

微前端技术在商羚商户端实战

你也可能喜欢

评论已经被关闭。

插入图片