Ubuntu nginx 配置指导二

16 篇文章 0 订阅

Ubuntu nginx 配置指导二

1. nginx 内置变量
  • $remote_addr;
    #存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。
  • $args;
    #变量中存放了URL中的指令,例如http://www.youyou.net/main/index.do?
    id=20190221&partner=search中的id=20190221&partner=search
  • $document_root;
    #保存了针对当前资源的请求的系统根目录,如/apps/nginx/html。
  • $document_uri;
    #保存了当前请求中不包含指令的URI,注意是不包含请求的指令,比如
    http://www.youyou.net/main/index.do?id=20190221&partner=search会被定义为/main/index.do 。
  • $host;
    #存放了请求的host名称。
  • $http_user_agent;
    #客户端浏览器的详细信息
  • $http_cookie;
    #客户端的cookie信息。
  • limit_rate 10240;
    echo $limit_rate;
    #如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0。
  • $remote_port;
    #客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。
  • $remote_user;
    #已经经过Auth Basic Module验证的用户名。
  • $request_body_file;
    #做反向代理时发给后端服务器的本地资源的名称。
  • $request_method;
    #请求资源的方式,GET/PUT/DELETE等
  • $request_filename;
    #当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,
    如/apps/nginx/html/main/index.html
  • $request_uri;
    #包含请求参数的原始URI,不包含主机名,如:/main/index.do?id=20190221&partner=search 。
  • $scheme;
    #请求的协议,如ftp,https,http等。
  • $server_protocol;
    #保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。
  • $server_addr;
    #保存了服务器的IP地址。
  • $server_name;
    #请求的服务器的主机名。
  • $server_port;
    #请求的服务器的端口号。
2. nginx自定义变量
假如需要自定义变量名称和值,使用指令set $variable value;  
则方法如下:  
Syntax: set $variable value;   
Default: —   
Context: server, location, if  
set $name youyou;
echo $name;
set $my_port $server_port;
echo $my_port;
echo "$server_name:$server_port";
3. nginx if判断

属于ngx_http_rewrite_module模块指令

=#比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false。
!=: #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false。
~: #表示在匹配过程中区分大小写字符,(可以通过正则表达式匹配),满足匹配条件为真,不满足为假。
!~:#为区分大小写字符且匹配结果不匹配,不满足为真,满足为假。
~*: #表示在匹配过程中不区分大小写字符,(可以通过正则表达式匹配),满足匹配条件为真,不满足为假。
!~*: #为不区分大小字符且匹配结果不匹配,满足为假,不满足为真。
-f 和 ! -f: #判断请求的文件是否存在和是否不存在
-d 和 ! -d: #判断请求的目录是否存在和是否不存在。
-x 和 ! -x: #判断文件是否可执行和是否不可执行。
-e 和 ! -e: #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)。
# 范例
location /main {
    index index.html;
    default_type text/html;
    if ( $scheme = http ){
        echo "if-----> $scheme";
    }
    if ( $scheme = https ){
        echo "if ----> $scheme";
    }
}
4. nginx break指令

属于ngx_http_rewrite_module模块指令
用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的指令配置就不再生效了,Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和location块以及if块中使用

location /main {
    root /data/nginx/html/pc;
    index index.html;
    default_type text/html;
    set $name youyou;
    echo $name;
    break;
    set $my_port $server_port;
    echo $my_port;
}
5. nginx return指令

属于ngx_http_rewrite_module模块指令
从nginx版本0.8.2开始支持,return用于完成对请求的处理,并直接向客户端返回响应状态码,比如其可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if和location块进行配置,用法如下:

return code; #返回给客户端指定的HTTP状态码
return code (text); #返回给客户端的状态码及响应体内容,可以调用变量
return code URL; #返回给客户端的URL地址
6. nginx rewrite指令

属于ngx_http_rewrite_module模块指令

rewrite regex replacement [flag];

rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI。 注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制,如果替换后的URL是以http://或https://开头,则替换结果会直接以重向返回给客户端, 即永久重定向301

  1. flag介绍
    redirect;
    #临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
    permanent;
    #重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301
    last;
    #对某个location的URL匹配成功后会停止当前location的后续rewrite规则,并结束当前location,然后将匹配生成的新URL跳转至其他location继续匹配,直到没有location可匹配后将最后一次location的数据返回给客户端。
    break;
    #重写完成后停止对当前URL在当前location中后续的其它重写操作,而后直接将匹配结果返还给客户端即结束循环并返回数据给客户端,建议在location中使用
    
  2. 临时重定向不会缓存域名解析记录(A记录),但是永久重定向会缓存
  3. 全站https
    server {
        listen 443 ssl;
        listen 80;
        ssl_certificate /apps/nginx/certs/www.youyou.net.crt;
        ssl_certificate_key /apps/nginx/certs/www.youyou.net.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        server_name www.youyou.net;
        location / {
            root /data/nginx/html/pc;
            index index.html;
            if ($scheme = http ){ 
            #未加条件判断,会导致死循环
            rewrite / https://www.youyou.net permanent;
            }
        }
    }
    
7. nginx 防盗链

基于访问安全考虑,nginx支持通过ungx_http_referer_module模块 https://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers 检查访问请求的referer信息是否有效实现防盗链功能,定义方式如下:

[root@s2 ~]# vim /apps/nginx/conf/conf.d/pc.conf
location /images {
    root /data/nginx/html/pc;
    index index.html;
    valid_referers none blocked server_names
    *.example.com example.* www.example.org/galleries/
    ~\.google\.;
    # 定义放通的网址,如搜索引擎之类的。然后如果不在这里面的。就会返回403
    if ($invalid_referer) {
    return 403;
    }
}
8. nginx 支持php fastcgi
[root@s2 ~]# vim /apps/nginx/conf/conf.d/pc.conf #在指定文件配置fastcgi
   location ~ \.php$ {
       root /data/nginx/php; #$document_root调用root目录
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       #fastcgi_param SCRIPT_FILENAME /data/nginx/php$fastcgi_script_name;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       #如果SCRIPT_FILENAME是绝对路径则可以省略root /data/nginx/php;
       include fastcgi_params;
   }
#重启Nginx并访问web测试

php 配置优化

[root@s2 ~]# grep "^[a-Z]" /etc/php-fpm.conf
include=/etc/php-fpm.d/*.conf
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes #是否后台启动
[root@s2 ~]# cat /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 #监听地址及IP
listen.allowed_clients = 127.0.0.1 #允许客户端从哪个源IP地址访问,要允许所有行首加 ;注释即可
user = nginx #php-fpm启动的用户和组,会涉及到后期文件的权限问题
group = nginx
pm = dynamic #动态模式进程管理
pm.max_children = 500 #静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数
pm.start_servers = 100 #动态模式下初始进程数,必须大于等于pm.min_spare_servers和小于等于
pm.max_children的值。
pm.min_spare_servers = 100 #最小空闲进程数
pm.max_spare_servers = 200 #最大空闲进程数
pm.max_requests = 500000 #进程累计请求回收值,会回收并重新生成新的子进程
pm.status_path = /pm_status #状态访问URL
ping.path = /ping #ping访问动地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢日志路径
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误日志
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存方式及路径
php_value[session.save_path] = /var/lib/php/session #当时使用file保存session的文件路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值