itwiki:nginx-practice

这是本文档旧的修订版!


Nginx 实践

for Nginx v1.20.1 or Later

本实践崇尚快速落地部署,因此整理一些最小化的安装及部署配置,通常情况下,将配置文件复制过去修改部分参数就可以使用。该部分配置为NGINX站点配置,Linux环境下,文件通常保存在:/etc/nginx/conf.d/目录下。

nginx.org

我们可以将NGINX的软件源添加到系统中,然后通过系统自带的软件包管理系统,如YUM,DNF,APT之类的进行软件及相关模块安装,使用编译安装也可以,但会在系统中安装一大堆的依赖项,清除也容易清除。

查找系统上已经安装的NGINX及相关模块

rpm -qa | grep nginx

以CentOS为例安装Nginx相关模块

yum search nginx
yum install nginx-mod-ModName
server {
    listen 80;
    listen [::]:80;
    server_name www.xyz.com; # server_name _ 未提供HOST头部时使用的站点
 
    root /var/www/app-path/
    index index.html
    location / {
    }
}

通常指定网站根目录及首页即可

暂未涉及

将 Nginx 作为一个HTTP代理服务器使用

# Proxy-serv.conf

server {

    listen 18081;
    server_name _;
    # other settings for example ssl
    
    # 代理CONNECT连接请求,代理443及503端口
    proxy_connect;
    proxy_connect_allow 443 563;
    proxy_connect_connect_timeout 10s;
    proxy_connect_read_timeout 10s;
    proxy_connect_send_timeout 10s;
    
    location / {
    
        resolver 8.8.8.8; #DNS Server used
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header HOST $host;
        
        #proxy_cache STATIC;
        #proxy_cache_valid 200 1d; 针对响应码为200的应答进行缓存,缓存时间一天
        #proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
        
        #proxy_buffers 256 4k;
        #proxy_max_temp_file_size 0k;
        #proxy_connect_timeout 30;
        #proxy_send_timeout 60;
        #proxy_read_timeout 60;
        #proxy_next_upstream error timeout invalid_header http_502;
        
    }

    error_page 500 502 503 504 /50x.html;
    
    location = /50x.html {
        root /var/www/html;
    }
}

注意:被注释掉的部分都是可以不需要的,是配置代理服务器的一般参数

设置代理,如须在系统中一直启用,须在启动文件,诸如:~/.bashrc等文件中添加以下指令

  export http_proxy=$IP:$PORT
  export https_proxy=$IP:$PORT

使用代理下载数据或者获取参数

$ curl --proxy=$IP:$PORT request_url

注:如果命令中包含引号,&等符号,须用双引号(单引号)将整个参数包裹,或者进行转义,否则命令会被截断。至于包裹符号用单引号还是双引号,取决于命令中包含的符号,如果命令中包含单引号,则用双引号包裹,反之则用单引号包裹。

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

  • = /path... 为精确匹配
  • ^~ /path... 匹配以/path开关的路径。location中的规则无需进行url编解码,当请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
  • ~ expr... 匹配包含expr的路径,可用正则表达式
  • ~* expr... 同上,但不区分大小写
  • !~ expr 与 !~* expr... 反向匹配,匹配不包含指定路径的规则
  • / 通用路径匹配,最终路径,所有路径均未匹配时,调用规则

规则匹配顺序

  • = /PATH ..., 精确匹配
  • ^~ /PATH ..., 首位匹配
  • 按照配置文件进行匹配

禁止客户端访问指定路径,以下配置节禁止客户端访问/conf/, /bin/, /inc, /vendor/ 等目录

    location ~ /(conf|bin|inc|vendor)/ {
        allow 192.168.1.0/24;
        deny all;
    }

针对指定路径返回指定状态,以下配置将路径/usr/c03f883c.db设置为404未找到

location ^~ /usr/c03f883c.db {
    return 404;
}

对指定路径进行HTTP BASIC认证

location / {
    auth_basic "访问需要认证";
    auth_basic_user_file /etc/nginx/conf.d/htpasswd; 
    #autoindex on;
}

需要注意认证文件位置,否则会一直无法认证

使用以下命令生成所需的PASSWORD文件

printf "hsiaotien:$(openssl passwd -crypt 123456)\n" >> conf/htpasswd
#用户名:hsiaotien, 密码:123456
#注意:密码不要超过8位,否则可能无法工作。也因此在有条件的情况下,不要使用BASIC认证方式
  • itwiki/nginx-practice.1704279189.txt.gz
  • 最后更改: 2024/01/03 11:53
  • ovwx@live.io