Nginx 配置简述

3,947 阅读3分钟

nginx使用了两年多,负载均衡,正向反向代理,各种优缺点‘张口就来’,行云流水,一到自己上手配置,就一脸懵逼,各种报错。本文整理 Nginx 配置的基本知识,有用到过来复制。

简介

Nginx 的安装

# CentOS
yum install nginx;
# Ubuntu
sudo apt-get install nginx;
# Mac
brew install nginx;
# windows
官网下载,解压即用
# 自己编译的
// todo

一般可以在 /etc/nginx/nginx.conf 中配置,启动参数为

# 启动
nginx -s start;
# 重新启动,热启动,修改配置重启不影响线上
nginx -s reload;
# 关闭
nginx -s stop;
# 修改配置后,可以通过下面的命令测试是否有语法错误
nginx -t;

一个最简单的 nginx.conf 配置:

events {
    # 需要保留这一个段落,可以为空
}
http {
    server {
        listen 127.0.0.1:8888;
        location / {
            root /roottest/;
        }
    }
}

启动后,访问 htttp://127.0.0.1:8888 ,如果 /home/test/ 下有 index.html 文件就会展示 index.html 的内容,否则返回 404。

Nginx 配置一个 Web 服务器

以下对配置 Web 服务器的参数做简单说明,包括如何配置端口、域名,如何处理请求,如何响应请求。

1、 虚拟主机和请求的分发

  • 域名和端口的配置
listen 127.0.0.1:8000;
listen *:8000;
listen localhost:8000;
# IPV6
listen [::]:8000;
# other params
listen 443 default_serer ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024

  • 主机名配置
server_name www.mdollar.com mdollar.com
server_name *.mdollar.com
server_name ~^\.mdollar\.com$
  • URI 匹配
location = / {
    # 完全匹配  =
    # 大小写敏感 ~
    # 忽略大小写 ~*
}
location ^~ /images/ {
    # 前半部分匹配 ^~
    # 可以使用正则,如:
    # location ~* \.(gif|jpg|png)$ { }
}
location / {
    # 如果以上都未匹配,会进入这里
}

2、 文件路径的定义

  • 根目录设置
location / {
    root /root/test/;
}
  • 别名设置
location /test {
    alias /root/mdollartest/;
}
location ~ ^/blog/(\d+)/([\w-]+)$ {
    alias /root/mdollar/test/$1-$2.md;
}
  • 首页设置
index /html/index.html /html/index.htm ;
  • 重定向页面设置
error_page    404         /404.html;
error_page    502  503    /50x.html;
error_page    404  =200   /1x1.gif;

location / {
   error_page  404 @fallback;
}
location @fallback {
   # 将请求反向代理到上游服务器处理
   proxy_pass http://localhost:9000;
}
  • try_files 设置
try_files $uri $uri.html $uri/index.html @other;
location @other {
    # 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
    proxy_pass  http://localhost:9000;
}
location / {
    # 尝试寻找匹配 uri 的文件,没找到直接返回 502
    try_files $uri $uri.html =502;
}

Nginx 配置反向代理服务器

反向代理(reserve proxy)方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将上游服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。

Nginx 具备超强的高并发高负载能力,一般会作为前端的服务器直接向客户端提供静态文件服务;而业务一般还包含一些业务逻辑需要 Apache、Tomcat 等服务器来处理,故通常 Nginx 对外表现即为静态 Web 服务器也是反向代理服务器。

缺点是增加了一次请求的处理时间,优点是降低了上游服务器的负载,尽量将压力放在 Nginx 服务器上。

1、负载均衡配置

upstream,定义一个上游服务器集群

upstream mdollar {
    # ip_hash;
    server s1.mdollar.com;
    server s2.mdollar.com;
}
server {
    location / {
        proxy_pass http://mdollar;
    }
}

2、反向代理

proxy_pass 将请求转发到有处理能力的端上,默认不会转发请求中的 Host 头部

location /test {
    prox_pass http://localhost:9000;
    ### 下面都是次要关注项
    proxy_set_header Host $host;
    proxy_method POST;
    # 指定不转发的头部字段
    proxy_hide_header Cache-Control;
    proxy_hide_header Other-Header;
    # 指定转发的头部字段
    proxy_pass_header Server-IP;
    proxy_pass_header Server-Name;
    # 是否转发包体
    proxy_pass_request_body on | off;
    # 是否转发头部
    proxy_pass_request_headers on | off;
    # 显形/隐形 URI,上游发生重定向时,Nginx 是否同步更改 uri
    proxy_redirect on | off;
}

小结

这是阅读《深入理解 Nginx 模块开发和架构解析》时做的一点笔记,以前配置 Nginx 服务器总是得上网找答案,现在需要把这些项都理解并记到脑子里了,还是担心忘记,博客稍作记录。