• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

nginx配置文件及模块

Nginx eryajf 7个月前 (06-21) 72℃ 已收录 0个评论
本文预计阅读时间 21 分钟

1,nginx是什么?

Nginx是一个基于c语言开发的高性能http服务器及反向代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

2,为什么要用nginx?

理由一:

  • 传统的小型网站并发量小,用户使用的少,所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。为了解决并发,可以使用负载均衡,也就是多增加几个tomcat服务器,当用户访问的时候,请求可以提交到空闲的tomcat服务器上。
  • 但是这种情况下可能会出现一种问题:假设把图片上传到了tomcat1上了,当要访问这个图片的时候,tomcat1正好在工作,所以访问的请求就交给其他的tomcat操作,而tomcat之间的数据没有进行同步,所以就发生了我们要请求的图片找不到。
  • 为了解决这种情况,我们专门建立一个图片服务器,用来存储图片。这样当都把图片上传的时候,不管是哪个服务器接收到图片,都把图片上传到图片服务器。而图片服务器上需要安装一个http服务,可以使用tomcat、apache、nginx。
  • 理由二:

  • nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西。
  • 理由三:

    nginx作反向代理:

  • 反向代理就是后端服务不直接对外暴露,请求首先发送到nginx,然后nginx将请求转发到后端服务器,比如tomcat等.如果后端服务只有一台服务器,nginx在这里只有一个作用就是起到了代理后端服务接收请求的作用.称之为反向代理.
  • 理由四:

    nginx作负载均衡:

  • 在现实的应用场景中,一台后端服务器出现单点故障的概率很大或者单台机器的吞吐量有限,无法承担过多请求.这时候就需要在nginx后端配置多台服务器,利用nginx内置的规则讲请求转发到后端不同的机器上.这时候就起到了负载均衡的作用.
  • 3,nginx配置文件。

    主要组成部分:

    main(全局设置)

  • main部分设置的指令将影响其它所有部分的设置;
  • server(主机设置)

  • server部分的指令主要用于指定虚拟主机域名、IP和端口;
  • upstream

  • upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;
  • location

  • location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等);

  • 他们之间的关系:

    server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

    举例说明:

    下面的nginx.conf简单的实现nginx在前端做反向代理服务器的例子,处理js、png等静态文件,jsp等动态请求转发到其它服务器tomcat:
    user www www;
    worker_processes 2;
    error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;
    pid logs/nginx.pid;
    events {
    use epoll;
    worker_connections 2048;
    }
    http {
    include 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 logs/access.log main;
    sendfile on;
    # tcp_nopush on;
    keepalive_timeout 65;
    # gzip压缩功能设置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
    # http_proxy 设置
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 75;
    proxy_send_timeout 75;
    proxy_read_timeout 75;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
    # 设定负载均衡后台服务器列表
    upstream backend {
    #ip_hash;
    server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
    server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
    }
    # 很重要的虚拟主机配置
    server {
    listen 80;
    server_name itoatest.example.com;
    root /apps/oaapp;
    charset utf-8;
    access_log logs/host.access.log main;
    #对 / 所有做负载均衡+反向代理
    location / {
    root /apps/oaapp;
    index index.jsp index.html index.htm;
    proxy_pass http://backend;
    proxy_redirect off;
    # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
    #静态文件,nginx自己处理,不去backend请求tomcat
    location ~* /download/ {
    root /apps/oa/fs;
    }
    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
    {
    root /apps/oaapp;
    expires 7d;
    }
    location /nginx_status {
    stub_status on;
    access_log off;
    allow 192.168.10.0/24;
    deny all;
    }
    location ~ ^/(WEB-INF)/ {
    deny all;
    }
    #error_page 404 /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    }
    ## 其它虚拟主机,server 指令开始
    }
    

    这里仅仅是作为一个示例。

    4,常用指令或者模块说明。

    4.1main全局设置。

    woker_processes 2;

    worker_cpu_affinity;

    worker_connections 2048;

    worker_rlimit_nofile 10240;

    use epoll;

    4.2http服务器。

    sendfile on;

    keepalive_timeout 65;

    send_timeout ;

    client_max_body_size 10m;

    client_body_buffer_size 128k;

    4.3模块http_proxy

    proxy_read_timeout 60;

    proxy_buffer_size 4k;

    proxy_buffers 4 32k;

    proxy_busy_buffers_size 64k;

    proxy_max_temp_file_size;

    proxy_temp_file_write_size 64k;

    4.4模块http_gzip:

    gzip on :

    gzip_min_length 1k :

    gzip_buffers 4 16k :

    gzip_http_version 1.0 :

    gzip_comp_level 6 :

    gzip_types :

    gzip_proxied any :

    gzip_vary on :

    4.5server虚拟主机

    listen;

    server_name;

    4.6模块http_stream

    host:port options;

    4.7location

    root /var/www/html;

    index index.jsp index.html index.htm;

    proxy_pass http:/backend;

    4.8访问控制 allow/deny

    Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配。如:

    location /nginx-status {
    stub_status on;
    access_log off;
    # auth_basic "NginxStatus";
    # auth_basic_user_file /usr/local/nginx-1.6/htpasswd;
    allow 192.168.10.100;
    allow 172.29.73.0/24;
    deny all;
    }
    

    也常用 httpd-devel 工具的 htpasswd 来为访问的路径设置登录密码:

    # htpasswd -c htpasswd admin
    New passwd:
    Re-type new password:
    Adding password for user admin
    # htpasswd htpasswd admin //修改admin密码
    # htpasswd htpasswd sean //多添加一个认证用户
    

    这样就生成了默认使用CRYPT加密的密码文件。打开上面nginx-status的两行注释,重启nginx生效。

    4.9列出目录 autoindex

    Nginx默认是不允许列出整个目录的。

    如需此功能,打开nginx.conf文件,在location,server 或 http段中加入autoindex on;,另外两个参数最好也加上去:

    autoindex_exact_size off;

    autoindex_localtime on;

    location /images {
    root /var/www/nginx-default/images;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    }
    

    整理自公众号《我的运维之旅


    weinxin
    扫码订阅,第一时间获得更新
    微信扫码二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

    二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明nginx配置文件及模块
    喜欢 (1)
    [如果想支持本站,可支付宝赞助]
    分享 (0)
    eryajf
    关于作者:
    学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

    您必须 登录 才能发表评论!