Nginx是一个高并发,高性能的服务器,可以进行反向代理以及网站的负载均衡。这些功能的运用都在配置文件中,也就是Nginx安装目录下的conf/nginx.conf。

nginx.conf

1. 先来看下Nginx默认的配置文件以及说明:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#user nobody;#----------------------------------------------# user用来配置使用的用户和组,默认是没有进行配置的:# 如下配置表示配置aries这个用户以及aries这个用户组:# user aries aries #----------------------------------------------
worker_processes 1;
#----------------------------------------------# worker_processes 用来配置Nginx开启的进程数,# 一般配置等于cpu的核数。#----------------------------------------------
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#---------------------------------------------# error_log 全局错误日志配置,后面跟生成的# 志文件的位置,默认在Nginx的logs# 文件夹中,以及日志级别。# [ debug | info | notice | warn | error | crit ]
#---------------------------------------------
#pid logs/nginx.pid;
#---------------------------------------------
# pid 当Nginx启动时会生成一个nginx.pid的文件,# 里面存放的是Nginx主线程的id号。#---------------------------------------------
#工作模式与连接数上限events { use epoll;
worker_connections 1024; #配置Nginx单个进程允许的最大连接数。
}
#设定http服务器
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;
#----------------------------------------------------------------------- # log_format 配置日志格式,后面跟日志格式的名称和配置的格式,参数是Nginx中 # 一些内置的属性。 # access_log 配置日志的存放位置,以及后面跟日志打印格式内容。 # ----------------------------------------------------------------------
sendfile on; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件
#tcp_nopush on; # 防止网络阻塞
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on; # 配置开启gzip压缩
#虚拟主机的配置
server {
listen 80; # 监听端口
server_name localhost;
# 监听主机名称或者ip
#charset koi8-r;
# 默认编码
#access_log logs/host.access.log main;
# 日志
location / {
root html;
index index.html index.htm;
} #------------------------------------------------- # 配置的访问位置,默认是html目录下的index.html文件,    # 如果不存在则找index.htm文件 #-------------------------------------------------
#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;
}
}
#user nobody;#----------------------------------------------# user用来配置使用的用户和组,默认是没有进行配置的:# 如下配置表示配置aries这个用户以及aries这个用户组:# user aries aries #---------------------------------------------- worker_processes 1; #----------------------------------------------# worker_processes 用来配置Nginx开启的进程数,# 一般配置等于cpu的核数。#---------------------------------------------- #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#---------------------------------------------# error_log 全局错误日志配置,后面跟生成的# 志文件的位置,默认在Nginx的logs# 文件夹中,以及日志级别。# [ debug | info | notice | warn | error | crit ] #--------------------------------------------- #pid logs/nginx.pid; #--------------------------------------------- # pid 当Nginx启动时会生成一个nginx.pid的文件,# 里面存放的是Nginx主线程的id号。#--------------------------------------------- #工作模式与连接数上限events { use epoll; worker_connections 1024; #配置Nginx单个进程允许的最大连接数。 } #设定http服务器 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; #----------------------------------------------------------------------- # log_format 配置日志格式,后面跟日志格式的名称和配置的格式,参数是Nginx中 # 一些内置的属性。 # access_log 配置日志的存放位置,以及后面跟日志打印格式内容。 # ---------------------------------------------------------------------- sendfile on; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件 #tcp_nopush on; # 防止网络阻塞 #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 配置开启gzip压缩 #虚拟主机的配置 server { listen 80; # 监听端口 server_name localhost; # 监听主机名称或者ip #charset koi8-r; # 默认编码 #access_log logs/host.access.log main; # 日志 location / { root html; index index.html index.htm; } #------------------------------------------------- # 配置的访问位置,默认是html目录下的index.html文件,    # 如果不存在则找index.htm文件 #------------------------------------------------- #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; } }
#user  nobody;#----------------------------------------------# user用来配置使用的用户和组,默认是没有进行配置的:# 如下配置表示配置aries这个用户以及aries这个用户组:#         user aries aries #----------------------------------------------
worker_processes  1;
#----------------------------------------------# worker_processes 用来配置Nginx开启的进程数,#                  一般配置等于cpu的核数。#----------------------------------------------
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#---------------------------------------------# error_log 全局错误日志配置,后面跟生成的#           志文件的位置,默认在Nginx的logs#           文件夹中,以及日志级别。# [ debug | info | notice | warn | error | crit ]
#---------------------------------------------
#pid        logs/nginx.pid;
#---------------------------------------------
# pid 当Nginx启动时会生成一个nginx.pid的文件,#     里面存放的是Nginx主线程的id号。#---------------------------------------------
#工作模式与连接数上限events {    use epoll;
    worker_connections  1024;  #配置Nginx单个进程允许的最大连接数。
}

#设定http服务器
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;
    #-----------------------------------------------------------------------    # log_format  配置日志格式,后面跟日志格式的名称和配置的格式,参数是Nginx中    #             一些内置的属性。    # access_log  配置日志的存放位置,以及后面跟日志打印格式内容。    # ----------------------------------------------------------------------
    sendfile        on; # 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件
    #tcp_nopush     on; # 防止网络阻塞

    #keepalive_timeout  0;
    keepalive_timeout  65; 

    #gzip  on;    # 配置开启gzip压缩
    #虚拟主机的配置
    server {
        listen       80;        # 监听端口
                server_name  localhost;
        # 监听主机名称或者ip
                #charset koi8-r;
        # 默认编码
        #access_log  logs/host.access.log  main;
        # 日志
        location / {
            root   html;
            index  index.html index.htm;
        }        #-------------------------------------------------        #  配置的访问位置,默认是html目录下的index.html文件,      # 如果不存在则找index.htm文件        #-------------------------------------------------

        #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;
        }
}

“http”表示配置的http协议的请求,里面可以配置多台server(虚拟主机),基本的配置格式如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
......
event{
......   
   }
http{
.....
server {
......
      }
server {
......
      }
}
...... event{ ......       } http{ ..... server { ......       } server { ......       } }
......

event{

        ......   

    }

http{

      .....

      server {

                ......

       }

      server {

                ......

       }

     }

2. 下面配置负载均衡:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#user nobody;
worker_processes 1;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
log_format mystyle '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream mycomputers {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重;weigth参数表示权值,权值越大被分配到的几率越大;down表示当前主机不可用。
server 192.168.137.111:80 weight=2;
server 192.168.137.114:80 weight=2 ;
server 192.168.137.113:80 weight=2 down;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://mycomputers; # 将请求按照权重分配给上面配置的服务器
proxy_set_header X-UserRealIP-For $remote_addr;
# 因为用户请求服务,先到Nginx所以在服务端如果在服务端直接过去请求IP得到的是Nginx的主机,所以在这里去出用户的真实IP,设置在请求头中,服务端才可以获取用户的真实IP。
}
access_log logs/access.log mystyle;
}
}
#user nobody; worker_processes 1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; keepalive_timeout 65; log_format mystyle '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; upstream mycomputers { #upstream的负载均衡,weight是权重,可以根据机器配置定义权重;weigth参数表示权值,权值越大被分配到的几率越大;down表示当前主机不可用。 server 192.168.137.111:80 weight=2; server 192.168.137.114:80 weight=2 ; server 192.168.137.113:80 weight=2 down; } server { listen 80; server_name localhost; location / { proxy_pass http://mycomputers; # 将请求按照权重分配给上面配置的服务器 proxy_set_header X-UserRealIP-For $remote_addr; # 因为用户请求服务,先到Nginx所以在服务端如果在服务端直接过去请求IP得到的是Nginx的主机,所以在这里去出用户的真实IP,设置在请求头中,服务端才可以获取用户的真实IP。 } access_log logs/access.log mystyle; } }
#user  nobody;
worker_processes  1;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    keepalive_timeout  65;

    log_format mystyle '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
                   
    upstream mycomputers {
        #upstream的负载均衡,weight是权重,可以根据机器配置定义权重;weigth参数表示权值,权值越大被分配到的几率越大;down表示当前主机不可用。
        server 192.168.137.111:80 weight=2;
        server 192.168.137.114:80 weight=2 ;
        server 192.168.137.113:80 weight=2 down;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://mycomputers; # 将请求按照权重分配给上面配置的服务器
            proxy_set_header X-UserRealIP-For $remote_addr;
            # 因为用户请求服务,先到Nginx所以在服务端如果在服务端直接过去请求IP得到的是Nginx的主机,所以在这里去出用户的真实IP,设置在请求头中,服务端才可以获取用户的真实IP。        
        }
               
        access_log logs/access.log mystyle;
    }
}

3. 反向代理配置

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
server {      listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.137.114:8080; #代理的内部IP服务器 proxy_redirect off;       proxy_set_header X-Real-IP $remote_addr;
}
access_log logs/access.log mystyle;
}
server {      listen 80; server_name localhost; location / { proxy_pass http://192.168.137.114:8080; #代理的内部IP服务器 proxy_redirect off;       proxy_set_header X-Real-IP $remote_addr; } access_log logs/access.log mystyle; }
server {             listen       80;
        server_name  localhost;

        location / {
            proxy_pass   http://192.168.137.114:8080; #代理的内部IP服务器            proxy_redirect off;       proxy_set_header X-Real-IP $remote_addr;
        }     
        access_log logs/access.log mystyle;
    }

4. 动静分离配置

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
server{
listen 80;
server_name localhost;
#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或其他服务器处理
location ~ \.(jsp|jspx|do)?$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#所有静态文件由nginx直接读取不经过tomcat或resin
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
expires 15d;
}
location ~ .*\.(js|css)?${
expires 1h;
}
}
server{ listen 80; server_name localhost; #本地动静分离反向代理配置 #所有jsp的页面均交由tomcat或其他服务器处理 location ~ \.(jsp|jspx|do)?$ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #所有静态文件由nginx直接读取不经过tomcat或resin location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${ expires 15d; } location ~ .*\.(js|css)?${ expires 1h; } }
server{
        listen       80;
        server_name  localhost;        
        
        #本地动静分离反向代理配置
        #所有jsp的页面均交由tomcat或其他服务器处理
        location ~ \.(jsp|jspx|do)?$ {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
        #所有静态文件由nginx直接读取不经过tomcat或resin
        location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
            expires 15d;
        }

        location ~ .*\.(js|css)?${ 
            expires 1h;
        }
}

5. Nginx日志的切割

a 写如下脚本存放到 /usr/local/nginx/sbin目录下命名nginx_cut_log.sh, 作用是暂停nginx服务并备份日志文件,然后重启。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#!/bin/bash
BASE_PATH=/usr/local/nginx
LOGS_PATH=${BASE_PATH}/logs
LOGS_PATH_BAK=${LOGS_PATH}/logs_bak
BAK_TIME=`/bin/date -d yesterday +%Y%m%d`
$BASE_PATH/sbin/nginx -s stop
mv $LOGS_PATH/access.log $LOGS_PATH_BAK/access_$BAK_TIME.log
$BASE_PATH/sbin/nginx
#!/bin/bash BASE_PATH=/usr/local/nginx LOGS_PATH=${BASE_PATH}/logs LOGS_PATH_BAK=${LOGS_PATH}/logs_bak BAK_TIME=`/bin/date -d yesterday +%Y%m%d` $BASE_PATH/sbin/nginx -s stop mv $LOGS_PATH/access.log $LOGS_PATH_BAK/access_$BAK_TIME.log $BASE_PATH/sbin/nginx
#!/bin/bash
BASE_PATH=/usr/local/nginx
LOGS_PATH=${BASE_PATH}/logs
LOGS_PATH_BAK=${LOGS_PATH}/logs_bak
BAK_TIME=`/bin/date -d yesterday +%Y%m%d`

$BASE_PATH/sbin/nginx -s stop

mv $LOGS_PATH/access.log $LOGS_PATH_BAK/access_$BAK_TIME.log

$BASE_PATH/sbin/nginx

给所有用户添加执行权限: chmod a+x nginx_cut_log.sh

b 输入: crontab -e

插入如下代码: 00 00  *  *  *  sh /usr/local/nginx/nginx_cut_log.sh

此操作是让linux系统每天晚上12点整执行nginx_cut_log.sh脚本进行日志切割备份。

测试配置: */1 * * * * sh /usr/local/nginx/sbin/nginx_cut_log.sh       每分钟执行一次

BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`

效果如下:

 

以上都只是最基本的配置,还有其他各种细致的配置属性,推荐《nginx 实战》进行系统的了解和学习。

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论