nginx基础篇 - 入门配置实例(静态资源、反向代理)

1 配置文件的结构

nginx及其模块的工作方式在配置文件中确定。 默认情况下,配置文件名为 nginx.conf 并放在目录中 /usr/local/nginx/conf , /etc/nginx ,或者 /usr/local/etc/nginx

nginx由模块(module)组成,这些模块由配置文件中指定的指令控制。指令分为简单指令和块指令两种。

1.1 简单指令

简单指令以空格分隔,以分号结尾。

格式:<指令名称> <指令参数>;
示例:worker_processes 1;

1.2 块指令

块指令与简单指令具有相同的结构,但是它以一组附加指令结束(用括号括起来),而不是分号。

块指令允许嵌套!

格式:

<指令名称> {
	<附加简单指令1> <参数1>;
	<附加简单指令2> <参数1>;
	<附加块指令1> {
		<附加简单指令1.1> <参数1.1>;
		<附加简单指令1.2> <参数1.2>;
	}
}

示例:

server {
        listen       8000;
        listen       somename:8080;
        server_name  somename  alias  another.alias;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

1.3 上下文

如果一个块指令在大括号内包含其他指令, 则它被称为上下文。
如果一个指令没有包含在任何明确定义的上下文中,则其被包含在main上下文中。

比如在下面的配置示例中,上下文关系为:main > http > server > location > root

http指令在main上下文中
server指令在http上下文中
location指令在server上下文中
以此类推

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
	}
}

1.4 注释

# 符号之后的其余部分被视为注释。

例如:

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

2 静态资源服务器实例

2.1 需求概述

本实例中我们将nginx用作静态资源服务器。

假设我们的需求为:

  • 当访问/xxx时,返回服务器上/root/data/xxx文件
  • 当访问/images/xxx.yyy时,返回服务器上/root/images/xxx.yyy文件

2.2 配置示例

操作过程:

  1. 首先我们上传部分文件到服务器(过程略):
    静态资源
  2. 修改nginx配置,将nginx.conf修改为如下内容
    user  root;
    worker_processes  1;
    
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
    	
        keepalive_timeout  65;
    
       server {
    		location / {
    			root /root/data/;
    		}
    
    		location /images/ {
    			root /root/data/;
    		}
    	}
    }
    
  3. 重启nginx。./nginx -s reload
  4. 测试
    在这里插入图片描述
    在这里插入图片描述

2.3 配置解释

server {
		location / {
			root /root/data/;
		}

		location /images/ {
			root /root/data/;
		}
	}
  • server
    • 通常情况下,一个配置文件中可能指定多个server块,通过其监听的端口和服务名称区分。
  • location
    • 一旦nginx决定了使用哪个server来处理请求,就会使用请求url和location指定的路径来执行匹配。
    • 如果一个url匹配了多个location路径,则会选择最长的location路径。例如/images/gin.png同时匹配location路径//images/,结果会使用location /images/
  • root
    • root指定了当前location块静态资源的根目录。例如访问/xxx/yyy路径时,将返回<root>/xxx/yy的静态资源。

3 代理服务器实例

3.1 需求概述

nginx的另一个常见用途是作为代理服务器,接收客户端请求,将其传递给指定的服务器,并将服务器的响应发送到客户端。

假设需求为:

  • 服务器上有一个Web服务,监听8000端口。其中有一个接口/go/hello,返回固定的应答Hello Golang!
  • nginx反向代理该服务,将所有/go/的请求交由该服务处理。

3.2 配置示例

  1. 写一个go语言的Web服务,监听8000端口,并开发好/go/hello接口。
    func main() {
    	http.HandleFunc("/go/hello", func(writer http.ResponseWriter, request *http.Request) {
    		writer.Write([]byte("Hello Golang!"))
    	})
    	if err := http.ListenAndServe(":8000", nil); err != nil {
    		log.Fatalf("http server shut down, err: %v", err)
    	}
    }
    
  2. 将该web服务打包成linux的可执行文件。
    # 设置环境为linux
    set CGO_ENABLED=0
    set GOOS=linux
    set GOARCH=amd64
    # 打包可执行文件
    go build .
    
  3. 将该可执行文件上传到服务器/opt/go-web/目录下并启动。
    # 跳转到可执行文件的目录
    cd /opt/go-web
    # 授予权限
    chmod 777 go-web
    # 后台启动
    nohup ./go-web >> ./go-web.log 2>&1 &
    
  4. 修改nginx配置,反向代理go服务。
    修改nginx配置,将nginx.conf修改为如下内容
    user  root;
    worker_processes  1;
    
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
    	
        keepalive_timeout  65;
    
       server {
    		location /go/ {
    			proxy_pass http://localhost:8000/go/;
    		}
    
    		location /images/ {
    			root /root/data/;
    		}
    	}
    }
    
  5. 重启nginx。./nginx -s reload
  6. 测试
    1. 访问<ip>/go/hello
      在这里插入图片描述

    2. 访问<ip>/images/gin.png
      在这里插入图片描述

3.3 配置解释

上面示例中,反向代理的核心配置为:

server {
			location /go/ {
				proxy_pass http://localhost:8000/go/;
			}
	
			location /images/ {
				root /root/data/;
			}
		}
  • proxy_pass指令用于指定其代理的服务器的URL(协议、IP、端口、路径)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值