Osmanthus

空想具現化


  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo

Nginx的一些简单配置

发布于 2018-07-25 Server  nginx 

这两天完善了下nginx的配置,包括配置HTTPS服务器,简单记录一下配置。

http

nginx主配置没有修改什么东西,只是加上了时区(东八区)方便查看日志。

user  nginx;
worker_processes  1;

# timezone
env TZ=Asia/Shanghai;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

service

基础配置与SSL相关的配置以及防盗链配置(匹配图片请求,然后判断referer)。

server {
    listen       80;
    listen       443 ssl;
    server_name  homurax.com www.homurax.com;

    # 打开SSL协议
    ssl                     on;

    # 指定服务器端证书和密钥文件的位置
    ssl_certificate          # 证书文件
    ssl_certificate_key      # 私钥
    ssl_trusted_certificate  # 含PEM格式的CA(root)证书,用于检查客户端证书
    ssl_protocols            SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers              HIGH:!aNULL:!MD5;
    ssl_session_timeout      5m; 

    # 让http请求重定向到https请求,也可以判断后直接做301重定向
    error_page 497  https://$host$uri;

    #charset koi8-r;
    access_log  /var/log/nginx/blog_access.log;
    error_log   /var/log/nginx/blog_error.log;
    error_page  404         /404.html;

    # 防盗链 对自身域名以及Google和百度爬虫放行
    location ~* \.(gif|jpe?g|png|swf|flv|rar|zip|bmp|mp3|swf)$ {
       root your webRoot;
       valid_referers none blocked *.homurax.com server_names ~\.google\. ~\.baidu\.;
       if ($invalid_referer) {
          return 403 'hehe';
       }
    }

    location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
        root your webRoot;
        access_log   off;
        expires      1d;
    }

    location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
        root your webRoot;
        access_log   off;
        expires      10m;
    }

    location / {
        root your webRoot;
        if (-f $request_filename) {
            rewrite ^/(.*)$  /$1 break;
        }
    }

    location /nginx_status {
        stub_status on;
        access_log off;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

防爬虫

可以直接写在service中,或者写在单独配置中,service中去include。

if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
     return 403;
}

# 禁止指定UA及UA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
     return 403;
}

# 禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
}

全局变量

还没有全看完,先记录下

$args //请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name
$arg_PARAMETER //这是参数的一个匹配模式,PARAMETER为具体的参数名,$arg_PARAMETER就表示获取具体的参数值,例如上面的$arg_name就是获取url中name的值
$is_args //判断url是否带参数,如果带,则返回一个?,否则返回一个空字符串

$http_user_agent //获取的是客户端访问代理的类型,请求头中的信息
$sent_http_content_type //获取的是http响应头中content_type的值
$sent_http_content_length //获取的是http响应头重的content_length的值

$request_filename  //该变量获取的是请求的文件在linux服务器上的完整的绝对路径
$request_method  //该表示获取的是http请求的方法
$request_uri  //该变量表示的原始请求的uri,包括参数。所谓原始请求就是即使在内部做了重定向之后也不会变化
$uri  //获取的是当前请求的uri,不包括参数
$content_length  //获取的是http请求头中Content-Length的值
$content_type   //获取的是http请求头中的Content-Type字段,不过这里也没显示。。。
$document_root   //获取的是请求url的文件所在的目录路径
$document_uri   //当前请求的uri,从上面的信息来看,和uri的效果是一样的
$remote_addr  //获取的是客户端的ip地址,这里为什么是10.0.10.11呢,因为我是在本机上用curl测试的,即使客户端也是服务器
$remote_port  //获取客户端的访问端口,这个端口是随机的
$remote_user  //获取客户端的认证用户信息,这里因为没有用认证,所谓显示为空
$server_protocol  //表示服务器端想客户端发送响应的协议
$server_addr  //服务器的地址
$server_name  //客户端访问服务端的域名,即url中的域名
$server_port //服务器端做出响应的端口号
$binary_remote_addr  //显示二进制的客户端地址
$host  //和server_name一样,表示的是域名
$hostname  //表示服务器端的主机名

$proxy_add_x_forwarded_for //获取的是客户端的真实ip地址
$proxy_host //该变量获取的是upstream的上游代理名称,例如upstream backend 
$proxy_port   //该变量表示的是要代理到的端口
$proxy_protocol_addr  //代理头部中客户端的ip地址,或者是一个空的字符串
$upstream_addr  //代理到上游的服务器地址信息
$upstream_cache_status    //proxy的缓存状态,例如这里第一次访问为MISS,第二次访问时为HIT
$upstream_response_length  //上游服务器响应报文的长度
$upstream_response_time  //上游服务器响应的时间
$upstream_status  //上游服务器响应的状态码

$scheme  //表示的是使用http的访问协议 http or https
$limit_rate  //表示当前连接的限速是多少,0表示无限制
$query_string  //表示的是查询字符串,也就是url中的参数,和$args一样
$realpath_root  //表示的是请求页面的真实所在目录的路径  和$document_root是一样的

参考

nginx
Nginx文档
为你的网站开启ssl支持

 上一篇: Git使用 下一篇: Hello, World! 

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo