前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx常用操作总结

Nginx常用操作总结

作者头像
陳斯托洛夫斯記
发布2022-10-27 14:46:13
3270
发布2022-10-27 14:46:13
举报
文章被收录于专栏:XBDXBD

安装

代码语言:javascript
复制
--prefix=PATH			# nginx的安装目录,默认值为/usr/local/nginx
--sbin-path=PATH		# 程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx
--modules-path=PATH		# nginx动态模块安装目录,默认值为<prefix>/modules
--conf-path=PATH		# 配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf
--error-log-path=PATH		# 错误日志文件的路径,默认值为<prefix>/logs/error.log
--http-log-path=PATH		# 访问日志文件的路径,默认值为<prefix>/logs/access.log
--pid-path=PATH			# Nginx启动后的pid文件路径,默认值为<prefix>/logs/nginx.pid
--lock-path=PATH		# Nginx锁文件的存储路径,默认值为<prefix>/logs/nginx.lock

配置

代码语言:javascript
复制
keepalive_timeout timeout		# 设定keepalived连接的超时时长,0表示禁止长连接
keepalive_requests number		# 在keepalived连接上所允许的最大资源数量,默认100
keepalive_disable							# 指明禁止为何种浏览器使用keepalive功能
send_timeout number							# 发送响应报文的超时时长,默认60s
client_body_buffer_size size		# 接收客户请求报文body的缓冲区大小,默认16k,超出此指定大小时,将被移存到磁盘上
client_body_temp_path			# 设定用于存储客户端请求body的临时存储路径及子目录结构 和数量
open_file_cache off;
open_file_cache max=N [inactive=time]
	nginx可以缓存以下三种信息:
		1、文件描述符、文件大小和最近一次的修改时间
		2、打开的目录的结构
		3、没有找到的或没有权限操作的文件的相关信息
	max=N		# 可以缓存的最大条目上限,一旦达到上限,则会使用LRU算法从缓存中删除最近最少使用的缓存项
	inactive=time	# 指定的时长内没有被访问过的缓存项视为非活动缓存项,直接删除
open_file_cache_errors on|off		# 是否缓存找不到其路径的文件,或没有权限访问的文件相关信息
open_file_cache_valid time		# 每隔多久检查一次缓存中缓存项的有效性,默认60s
open_file_cache_min_uses number		# 缓存项在非活动期限内最少应该被访问的次数

常用功能

代理
代码语言:javascript
复制
=			# 精确匹配
~			# 正则匹配,区分大小写
~*			# 正则匹配,不区分大小写
^~			# URI的左半部分匹配,不区分大小写
优先级:= -> ^~ -> ~或~* -> /

# 访问http://domain/forum时,重定向到http://192.168.1.11:8080/bbs
location /forum {
	proxy_pass http://192.168.1.11:8080/bbs;	# 不带模式匹配时,转发的目录后面是否带/,要跟上面的location后面的一致
}

# 模式匹配时,访问http://domain/forum时,重定向到http://192.168.1.11:8080/forum
location ~* ^/forum {
	proxy_pass http://192.168.1.11:8080;		# 模式匹配时,后面不允许带目录
}



# proxy_pass 后面带与不带"/"的区别

# http://ip/abc/index -> http://192.168.1.100:8080/abc/index
# 即nginx会把匹配到的内容都追加到proxy_pass地址后面
location /abc {
	proxy_pass http://192.168.1.100:8080;
}

# http://ip/abc/index -> http://192.168.1.100:8080//index
# nginx不会把匹配到的内容追加到proxy_pass地址后面
location /abc {
	proxy_pass http://192.168.1.100:8080/;
}

# http://ip/abc/index -> http://192.168.1.100:8080/abc/index
location /abc/ {
    proxy_pass http://192.168.1.100:8080;
}

# http://ip/abc/index -> http://192.168.1.100:8080/index
location /abc/ {
    proxy_pass http://192.168.1.100:8080/;
}

# http://ip/abc/index -> http://192.168.1.100:8080/defindex
location /abc/ {
    proxy_pass http://192.168.1.100:8080/def;
}

# http://ip/abc/index -> http://192.168.1.100:8080/def/index
location /abc/ {
    proxy_pass http://192.168.1.100:8080/def/;
}

# http://ip/abc/index -> http://192.168.1.100:8080/def/index
location /abc {
    proxy_pass http://192.168.1.100:8080/def;
}

# http://ip/abc/index -> http://192.168.1.100:8080/def//index
location /abc {
    proxy_pass http://192.168.1.100:8080/def/;
}
缓存
代码语言:javascript
复制
http {
    ......
    proxy_cache_path /nginx/cache levels=1:2:1 keys_zone=cache:100m max_size=1g;
    	# levels:定义缓存目录级别,如1级目录1个字符,2级目录2个字符,3级目录1个字符;
    	# keys_zone:命名共享内存空间,区域大小;
    	# max_size:缓存目录大小;
    ......
    
    server {
    	listen	80;
    	server_name www.xxx.com;
    	
        add_header X-Via $server_addr;			# 通过谁来
        add_header X-Cache $upstream_cache_status;	# 是否命中缓存
        add_header X-Cache "$upstream_cache_status from $server_addr";
        ......
        
        proxy_cache cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
    }
}
if指令
代码语言:javascript
复制
# -f和!-f:判断是否存在文件
# -d和!-d:判断是否存在目录
# -e和!-e:判断是否存在文件或目录
# -x和!-x:判断文件是否可执行

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;	# 如果UA包含"MSIE",rewrite请求到/msid/目录下
}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;									# 如果cookie匹配正则,设置变量$id等于正则引用部分
 }

if ($request_method = POST) {
    return 405;				# 如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
}

if ($slow) {
    limit_rate 10k;			# 限速,$slow可以通过 set 指令设置
}

if (!-f $request_filename){
    break;
    proxy_pass  http://127.0.0.1; 	# 如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
}

if ($args ~ post=140){
    rewrite ^ http://example.com/ permanent;		# 如果query string中包含"post=140",永久重定向到example.com
}

location ~* \.(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked www.jefflei.com www.leizhenfang.com;
    if ($invalid_referer) {		# 防盗链
        return 404;
    }
}
rewrite指令
代码语言:javascript
复制
rewrite 正则表达式 替代内容 [flag标记]

flag标记说明:
last:本条规则匹配完成后,继续向下匹配新的location URI规则;
break:本条规则匹配完成即终止,不再匹配后面的任何规则;
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址;
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
正则表达式
代码语言:javascript
复制
server_name中可以使用正则表达式,并且使用~作为正则表达式字符串的开始标记

配置案例:
server {
    listen	80;
    server_name ~^www\.(\w+)\.com$;		# ~后面不能有空格
    default_type text/plain;
} 
变量
代码语言:javascript
复制
vim conf/nginx.conf

location = /variable {
      add_header  Content-Type 'text/html; charset=utf-8';
      return 200 "
        args = $args<br />
        binary_remote_addr = $binary_remote_addr<br />
        body_bytes_sent = $body_bytes_sent<br />
        content_length = $content_length<br />
        content_type= $content_type<br />
        document_root = $document_root<br />
        document_uri = $document_uri<br />
        host = $host<br />
        hostname   = $hostname<br />
        http_user_agent = $http_user_agent<br />
        is_args = $is_args<br />
        limit_rate  = $limit_rate<br />
        nginx_version  = $nginx_version<br />
        query_string  = $query_string<br />
        remote_addr  = $remote_addr<br />
        remote_port  = $remote_port<br />
        request_filename = $request_filename<br />
        request_body  = $request_body<br />
        request_body_file  = $request_body_file<br />
        request_completion  = $request_completion<br />
        request_method  = $request_method<br />
        request_uri  = $request_uri<br />
        scheme  = $scheme<br />
        server_addr  = $server_addr<br />
        server_name  = $server_name<br />
        server_port  = $server_port<br />
        server_protocol  = $server_protocol<br />";
}

# 访问 http://192.168.1.64/variable?a=123
args = a=123
binary_remote_addr = ���
body_bytes_sent = 0
content_length =
content_type=
document_root = /etc/nginx/html
document_uri = /variable
host = 192.168.1.64			# nginx服务器IP
hostname = nginx			# nginx服务器主机名
http_user_agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
is_args = ?
limit_rate = 0
nginx_version 	= 1.18.0		# nginx版本
query_string = a=123
remote_addr = 192.168.1.243		# 客户端IP
remote_port = 54602
request_filename = /etc/nginx/html/variable
request_body =
request_body_file =
request_completion =
request_method = GET
request_uri = /variable?a=123
scheme = http
server_addr = 192.168.1.64
server_name = localhost			# nginx配置中的server_name
server_port = 80
server_protocol = HTTP/1.1

常用模块

ngx_http_auth_basic_module
代码语言:javascript
复制
ngx_http_auth_basic_module 		# basic认证
	auth_basic string | off;	# 使用http基本认证协议对用户进行认证
	auth_basic_user_file file	# 实现用户认证的账号文件
		htpasswd -c -m /etc/nginx/htpasswd admin
		htpasswd -m /etc/nginx/htpasswd test
			-c		# 创建用户,每次创建用户的时候使用
			-m		# 使用md5加密
ngx_http_stub_status_module
代码语言:javascript
复制
ngx_http_stub_status_module
	stub_status		# 输出stub_status
	
	Active connections	# 当前活动的客户端连接数
	accepts			# 已经接受的客户端连接问题
	handled			# 已经处理过后客户端连接问题
	requests		# 客户端的总的请求数量
	Readking		# 正在读取的客户端请求的数量
	Writing			# 正向其发送响应报文的连接数量
	Waiting:		# 等待其发出请求的空闲连接数量
ngx_http_referer_module
代码语言:javascript
复制
ngx_http_referer_module
	valid_referers none|blocked|server_names|string...
		none			# 请求报文不存在referer首部
		blocked			# 请求报文中存在referer首部,但其没有有效值,或其值非以http://或https://开头
		server_names		# 其值为一个主机名
ngx_http_proxy_module
代码语言:javascript
复制
ngx_http_proxy_module
	proxy_set_header Host $host			# upstream有多个主机时,需要加该选项
	proxy_set_header   X-Real-IP $remote_addr	# 获取客户端真实IP
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 配置
  • 常用功能
    • 代理
      • 缓存
        • if指令
          • rewrite指令
            • 正则表达式
              • 变量
              • 常用模块
                • ngx_http_auth_basic_module
                  • ngx_http_stub_status_module
                    • ngx_http_referer_module
                      • ngx_http_proxy_module
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档