澳门京葡网站 4

Nginx配置精解澳门京葡网站

Nginx配置相关结构划分说明

澳门京葡网站 1

原文来自:
Nginx配置需要一定的技巧,我们在不断的使用和维护中就会发现这些,接下来就向大家介绍下有关Nginx配置的相关技巧。我目前的Nginx配置是拆散的,这样可以便于在很多个虚拟主机和目录里重用部分配置。
总体是划分为这样一个结构:

澳门京葡网站 2

conf/         Nginx.conf         proxy.conf         rewrite.conf         location.conf         port.conf         upstream.conf         servers/                     www.sudone.com                     www.163.com

澳门京葡网站 3

  1. Nginx.conf 这就是Nginx配置读取的主文件,没特殊情况是通用的
  2. proxy.conf 代理的选项配置,也是通用的
  3. rewrite.conf
    所有主机的根目录公用的rewrite规则,默认是空文件,可以不使用。
  4. location.conf
    所有主机都会用到的location目录结构,默认是空文件,可以不使用。
  5. port.conf
    配置服务器绑定ip和端口,因为Nginx配置如果各个主机ip端口配置有不同会有bug,所以最好是统一设定。
  6. upstream.conf upstream写在这里面,和业务分开,易于控制。
  7. servers目录
    这个目录下面放的是所有的虚拟主机配置,每个虚拟主机一个文件,由Nginx.conf去include,这样处理这些配置变得很灵活。

原文来自:
Nginx配置需要一定的技巧,我们在不断的使用和维护中就会发现…

使用理由

Nginx配置详解

配置文件简单
支持Rewrite重写规则
内置健康检查功能
节省带宽
稳定性高
支持热部署```
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/3079704-6b2ce4b4b940b7d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>平滑重启

``` kill -HUP `/usr/local/nginx/logs/nginx.pid` ```

当Nginx接收到hup信号时,它会尝试先解析配置文件,如果 成功就应用新的配置谁的,之后,Nginx运行新的工作进程并从容关闭旧的工作进程 ,通知工作进程 关闭监听大套接字,但是继续为新的客户提供服务 ,所有客户端的服务完成后旧的工作进程 被关闭。如果 新的配置文件应用失败,Nginx继续使用旧的配置进行工作。

>Nginx支持以下几种信号

- TERM, INT 快速关闭;
- QUIT 从容关闭;
-  HUP 一滑重启,重新加载配置文件;
- USR1 重新的打开日志文件,在切割日志时用途较大;
- USR2 平滑升级可执行程序 ;
- WINCH  从容关闭工作进程。

>nginx配置

```#使用的用户和组
user www www;
#指定工作衍生进程数(一般等于CUP的总或总的两倍,例如两个 四核CUP,则总核数为8)
worker_processes 8;
#指定错误日志存放的路径,错误日志记录级别可选项为:【debug | info | notice | warn | error | crit 】
error_log /data1/logs/nginx_error.log crit;
#指定PID存放的路径
pid /usr/local/nginx/nginx.pid;
#指定文件描述符数量 
worker_rlimit_nofile 51200;

events {
 #使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统采用kqueue模型
use epoll;
#允许的连接数
worker_connections 51200;
}

http {
include mime types;
default_type application/octet-stream;
#设置使用的字符集,如果 一个网站 有多种字符集,请不要随便设置,就让程序 员在html代码中通过meta标签设置
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#设置客户端能够上传文件的大小
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fasgcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#开启gzip压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server {
#监听的IP和端口
 listen 80;
#主机名称
 server_name www.yourdomain.com yourdomain.com;
#默认首页文件,顺序从左到右,如果 找不到index.html文件,则查找 index.htm文件作为首页文件
index index.html index.htm index.php;
root /data0/htdocs;
#limit_conn crawler 20;
location ~  .*.(gif|jpg|jpeg|png|bmp|swf)${
 expires 30d;
} 
location ~ .*.(js|css)?${
 expires 1h;
}

log_format access '$remote_addr - $remote_user [$time_local] "$request" ' ' $status $body_bytes_sent "$http_referer" ' '$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access;
}
}

一、Nginx简介

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine
X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP
代理服务器。
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。
Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到Apache的近2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts
,适合用来做mongrel clusters的前端HTTP响应。

Nginx专为性能优化而开发,可以支持高并发连接

性能是其最重要的考量,实现上非常注重效率,处理响应请求很快
。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达
50,000个并发连接数。

Nginx具有很高的稳定性。

其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。

Nginx支持热部署。
它的启动特别容易,
并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

Nginx配置简单,只需要修改conf下的nginx.conf文件就行,也就几十行配置,简单的十几行就能搞定。

启动和停止Nginx

Nginx目前只支持命令行操作,进入Nginx部署目录。

1)         启动Nginx:start nginx
2)         停止Nginx:nginx -s stop
3)         修改配置后重启:nginx -s reload

虚拟主机

二、nginx.conf 配置文件

Nginx 配置文件主要分成四部分:main(全局设置)、http(HTTP
的通用设置)、server(虚拟主机设置)、location(匹配 URL
路径)。还有一些其他的配置段,如 event,upstream 等。

虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Internet服务器功能(www、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。

1、 通用设置

user nginx
指定运行 nginx workre 进程的用户和组
worker_rlimit_nofile #
指定所有 worker 进程能够打开的最大文件数
worker_cpu_affinity
设置 worker 进程的 CPU 粘性,以避免进程在 CPU 间切换带来的性能消耗。如
worker_cpu_affinity 0001 0010 0100 1000;(四核)
worker_processes 4
worker 工作进程的个数,这个值可以设置为与 CPU 数量相同,如果开启了 SSL
和 Gzip,那么可以适当增加此数值
worker_connections 1000
单个 worker 进程能接受的最大并发连接数,放在 event 段中
error_log logs/error.log info
错误日志的存放路径和记录级别
use epoll
使用 epoll 事件模型,放在 event 段中

利用虚拟主机,不用为每个要运行的网站 提供一台单独的Nginx服务
器或单独运行一级nginx进程
。虚拟主机提供了在同一台服务器、同一级Nginx进程 上运行多个网站 的功能。

2、 http 服务器配置

server {}:
定义一个虚拟主机
listen 80;
定义监听的地址和端口,默认监听在本机所有地址上,该端口不能被其他程序占用,否则启动不了,最开始80开始的端口。
server_name NAME […];
定义虚拟主机名,可以使用多个名称,还可以使用正则表达式或通配符。
sendfile on
开启 sendfile 调用来快速的响应客户端
keepalive_timeout 10
长连接超时时间,单位是秒。
send_timeout
指定响应客户端的超时时间
client_max_body_size 10m
允许客户端请求的实体最大大小
root PATH
设置请求 URL 所对应资源所在文件系统上的根目录
location [ = | ~ | ~* | ^~ ] URI { … }
设置一个 URI 匹配路径
=:精确匹配
~:正则表达式匹配,区分字符大小写
~*:正则表达式匹配,不区分字符大小写
^~:URI 的前半部分匹配,且不实用正则表达式
优先级:
= > location 完整路径 > ^~ > ~ > ~* > location 起始路径
> location /
allow 和 deny
基于 IP 访问控制,如:
仅允许 192.168.0.1/192.168.255.255 网段客户端访问
allow 192.168.0.1/192.168.255.255;
deny all;

rewrite <REGEX> <REPL> <FLAG>
URL 重写,可以使用多种标记
例如:
rewrite ^(.*.jpg)$ /imgs/$1 break;
Nginx配置精解澳门京葡网站。可用的 flag:

  • last:重写完成后,继续匹配其他 rewrite 规则
  • break:重写完成后不再继续匹配
  • redirect:返回 302 重定向(临时重定向),客户端对重定向的 URL
    发起新的请求
  • permanent:返回 301 重定向(永久重定向),客户端对重定向的 URL
    发起新的请求
    当我们把前段工程放到nginx的html目录下的时候,我们访问前段工程的时候就需要使用到URL的重写
    例如:我们的工程项目叫test,主页面是test目录下的index.html页面。
    配置如下:
    location/{
    rewrite “^/home/(.+)” /test/$1
    last;
    }
    当我们访问主页面的时候使用127.0.0.1:80/home/index.htnl就OK了。

跟apache一样,Nginx也可以配置多种类型的虚拟主机;一是基于ip的虚拟主机,二是基于域名的虚拟主机,三是基于端口的虚拟主机。

三、反向代理配置

修改部署目录下conf子目录的nginx.conf文件(如nginx/conf/nginx.conf)内容,可调整相关配置。

反向代理配置示例:
在对应的Server里面添加如下配置
location /
{#默认的/是指根目录。如果需要配置其他反向代理的路径,可以是根路径
location /test
             #禁用缓存
             proxy_buffering off;
             #设置反向代理的地址
#代理的可以是单独的地址,也可以加端口号,还可以加对应的路径比如
             proxy_pass ;       
     }

一段server{……}就是一个虚拟该机,如果要配置多个虚拟主机,建立多段server{}配置即可,非常方便,监听的IP商品也可以不写IP地址,只写端口,把它配置成“listen
80″,则表示监听 该服务器所有IP的80端口,可通过
server_name区分不同的虚拟主机。

四、负载均衡配置

反向代理后客户端IP问题

1、RR(默认)权重轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
例如:
upstream tomcats {
server 192.168.1.1:8080  max_fails=3 fail_timeout=3s weight=9;
server 192.168.1.2:8080  max_fails=3 fail_timeout=3s weight=1;
}
那么10次一般只会有1次会访问到8080,而有9次会访问到8080

由于在客户端和web服务器之间增加了蹭层,因此
web服务器无法直接拿到客户端的IP,通过
$remote_addr变量拿到的是反向代理服务器的ip地址,但是,反射代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址

2、ip_hash

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    upstream test {
        ip_hash;
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
    }

日志切割

3、fair(第三方)

需要安装第三方的fair插件才能配置使用
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream backend { 
        fair; 
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;
server 192.168.1.3:8080
backup;#设置为备用主机
    } 

#!/bin/bash
logs_path = "/data1/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")/access_$(date -d "yesterday" + "%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/nginx.pid`

4、url_hash(第三方)

需要安装第三方的url_hash插件才能配置使用
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
    upstream backend { 
        hash $request_uri; 
        hash_method crc32; 
        server 192.168.1.1:8080;
        server 192.168.1.2:8080;

    } 

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails
:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream
模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup:
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
要注意的是 weight 与 ip_hash
是不能同时使用的,原因很简单,他们是不同且彼此冲突的策略。
以上4种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用。

下面是一个完整的nginx的配置样例:

#user  nginx;#windows下可以不配置,但是linux下必须配置,不然没有访问权限。你使用用户nginx启动nginx,就配置为user nginx
worker_processes  8;#工作线程数量,可以配置为CPU的数量

error_log  logs/error.log;#错误日志输出文件
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#指定进程ID,方便在部署环境的时候写脚本去管理进程


events {
    worker_connections  1024;#配置的最大并发连接数量
}
upstream tomcats {
server 192.168.1.1:8080  max_fails=3 fail_timeout=3s weight=9;
server 192.168.1.2:8080  max_fails=3 fail_timeout=3s weight=1;
}

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  0;
    keepalive_timeout  65;#设置连接超时时间

    #gzip  on;
    #配置一个虚拟的server服务器
    server {
        listen       8880;#监听端口
        server_name  localhost;#主机名称
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass http://tomcats;
            index  index.html index.htm;
        }
        location /home {
            rewrite "^/home/(.+)" /test/$1 last;
        }
       location /Test {
           proxy_pass http://192.168.1.1:8080/TestServlet;
       }
        #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;
        }
    }
    include servers/*;
}

配置crontab每天凌晨00:00定时执行这个脚本:
crontab -e

Nginx的压缩输出配置

gizp(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面的大小可以变为原来的30%甚至更小。这样,用户浏览页面时候会快很多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,浏览器端解压并解析。大多数浏览器都支持解析gzip过的页面。
配置在http{}段中:

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/palin application/x-javascript text/css application/xml;
gzip_vary on;

自动目录配置

前提:当前目录下不存在index指令设置的默认首页文件。

location / {
  autoindex on;
}
相关指令
#设定索引时文件大小的单位【B、KB、GB】
autoindex_exact_xize [on|off]
#开户本地时间来显示 文件时间的功能。默认为关(GMT时间)

Nginx的浏览器本地缓存设置(Browser Cacging)

浏览器缓存是为了加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示
文档,这样就可以加速页面的浏览。缓存
的方式节约了网络的资源,提高网络的效率。

fastcgi

FastCG是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能,众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程
管理器调度,则可以提供良好的性能,伸缩性、Fail-Over特性等。

fastcgi 原理和优点

澳门京葡网站 4

Paste_Image.png

mysql管理shell脚本

vi /data0/mysql/3306/mysql

#!/bin/sh
mysql_port=3306
mysql_username="admin"
mysql_password="123456"

function_start_mysql() {
      printf "starting mysql...n"
      /bin/sh/usr/local/mysql/bin/mysqld_safe --defaults-file=/data0/mysql/${mysql_port}/my.cnf 2>&1>/dev/null &
}

function_stop_mysql() {
      printf "stoping mysql...n"
      /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p ${mysql_password} -S /tmp/mysql.sock shutdown
}

function_restart_mysql(){
      printf "restarting mysql...n"
      function_stop_mysql
      sleep 5
      function_start_mysql
}

function_kill_mysql(){
       kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
        kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}

if [ "$1" = "start"]; then
      function_start_mysql
elif [ "$1" = "stop" ]; then
      function_stop_mysql
elif ["$1" = "restart" ]; then
      function_restart_mysql
elif [ "$1" = "kill" ]; then
       function_kill_mysql
else
       printf "Usage:/data0/mysql/${mysql_prot}/mysql {start|stop|restart|kill}n"
fi

chmod +x /data0/mysql/3306/mysql

发表评论

电子邮件地址不会被公开。 必填项已用*标注