nginx合集

Posted 念长卿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx合集相关的知识,希望对你有一定的参考价值。

一、nginx安装的三种方式。

    1.yum安装

[root@recall-1 ~]#yum -y install nginx                 #yum安装nginx
[root@recall-1 ~]# rpm -qc nginx                       #查看配置文件位置
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf                                        
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
    

    2.rpm安装

[root@recall-1 ~]# rpm -ihv nginx-1.16.1-1.el7.ngx.x86_64.rpm
[root@recall-1 ~]# rpm -qc nginx                       #查看配置文件位置
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf                                        
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
 

    3.源码安装(推荐)(./configure --help可以查看所有模块)

[root@recall-1 ~]# ls
anaconda-ks.cfg  default  nginx-1.20.1.tar.gz
[root@recall-1 ~]# tar -xf nginx-1.20.1.tar.gz
[root@recall-1 ~]# cd nginx-1.20.1
[root@recall-1 ~]# yum -y install pcre-devel openssl-devel
[root@recall-1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx     #指定位置安装
[root@recall-1 nginx-1.20.1]# make && make install
 

4.为以及安装的nginx添加模块(编译安装模式,源码包用同一个版本的)

[root@recall-1 ~]# nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --prefix=/usr/local/nginx
[root@recall-1 ~]# ls
anaconda-ks.cfg  default  nginx-1.20.1.tar.gz
[root@recall-1 ~]# tar -xf nginx-1.20.1.tar.gz
[root@recall-1 ~]# cd nginx-1.20.1
[root@recall-1 nginx-1.20.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@recall-1 nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
[root@recall-1 nginx-1.20.1]# make                                                              #别make install  要不然直接GG
[root@recall-1 nginx-1.20.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak    #备份老的二进制文件
[root@recall-1 nginx-1.20.1]# cp objs/nginx /usr/local/nginx/sbin/nginx                         #拷贝新的二进制文件
[root@recall-1 nginx-1.20.1]# nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module
 
 
 
 

二、nginx的配置文件详解

1.优化后的nginx配置文件

 
 
user nginx;                
#优化1.工作进程数量 auto为自动       
worker_processes auto;             
 
 
#pid /usr/local/nginx/logs/nginx.pid;
 
 
#优化2.nginx最大文件打开数
worker_rlimit_nofile    65536;     
 
 
events {      
      #优化3.nginx事件处理epoll模型       
      use epoll;                   
  #优化4.进程允许客户端最大链接数     
      worker_connections 65535;    
}
 
 
http {
 
 
# Basic Settings  
charset UTF-8;
 
 
#优化5.开启高速传输配置  
sendfile on;   #开启高速传输                 
tcp_nopush on;  #数据不会马上发出去,而是等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
tcp_nodelay on;   #只要有数据包产生,不管大小多少,就尽快传输
 
 
types_hash_max_size 2048;
#        
    #优化6.链接超时时间############
# 长连接超时配置
keepalive_timeout  65;
client_header_timeout 60s;
client_body_timeout 60s;
send_timeout 300s;
 
 
#优化7.隐藏版本号##############  
server_tokens off;            
 
 
#优化8.限制文件上传大小     
client_max_body_size 8m;      
 
 
#include /etc/nginx/mime.types;
default_type application/octet-stream;
 
 
# SSL Settings                   #优化9.开启ssl证书协议   
 
 
ssl_certificate /usr/local/nginx/conf/server.pem;
ssl_certificate_key /usr/local/nginx/conf/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
 
 
# Logging Settings#优化10.前端有防火墙才会用这个日志格式
        log_format  main   - []       ;                     
access_log /usr/local/nginx/logs/access.log;
error_log /usr/local/nginx/logs/error.log;
 
 
 
 
        #ip limit        #优化11.nginx访问限速
        #限制用户连接数来预防DOS攻击
        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;
        #限制同一客户端ip最大并发连接数
        limit_conn perip 200;
        #限制同一server最大并发连接数
limit_conn perserver 200;
#限制下载速度,根据自身服务器带宽配置
limit_rate 3000k;
 
 
 
 
        #响应头
        add_header X-Cache $upstream_cache_status;
#        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
    
# Gzip Settings      #优化12.配置网页压缩gzip    
gzip on;
gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types image/png text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif;
 
 
# Virtual Host Configs   #优化13.设置vhost配置路径     
include /usr/local/nginx/conf/vhost/*.conf;      #  /usr/local/nginx/conf/vhost文件夹需要手动创建
}
 

2.server虚拟主机介绍

server {
    listen       80;                       #虚拟主机使用的端口
    server_name  localhost;                #虚拟主机使用的域名
    location / {                                                
        root   html;                       #虚拟主机web文件家目录
        index  index.html index.htm;       #index文件
}
}
 
以上为一个简单的server虚拟主机
 
1.基于ip的虚拟主机
server {
        listen 10.0.0.9:80;
        location / {
                root /code/addr1;
                index index.html;
        }
}
2.基于端口的虚拟主机
server {
    listen 80;
    server_name localhost;
    location / {
    root /code/tuixiangzi;
    index index.html;
    }
}
3.基于域名的虚拟主机
server {
    listen 80;
    server_name www.tuixiangzi.com;
    location / {
        root /code/tuixiangzi;
        index index.html;
    }
}
 
 

三、nginx的模块安装以及使用

1.目录索引模块

模块:ngx_http_autoindex_module     #添加模块步骤上面有些这里就不在写了
 
使用语法:
    autoindex on;                #开启目录索引
    autoindex_exact_size off;    #文件大小格式化(四舍五入)
    autoindex_localtime on;      #显示本机时间
 
添加的位置:
http, server, location均可
 

2.nginx访问控制模块

模块:ngx_http_access_module
 
使用语法:
        允许访问:
                allow ip | all;
        拒绝访问:
                deny address | all ;
 
添加的位置:http, server, location, limit_except
#如果配置允许,则也要配置拒绝;配置拒绝可以单独配置
 
 
例题:
拒绝指定ip其他全部允许
[root@web01 ~]# vim /etc/nginx/conf.d/www.autoindex.com.conf
server {
    listen 80;
    server_name www.autoindex.com;
    charset utf8;
    location / {
        root /code/autoindex;
        index index.html;
    }
    location /download {
        root /code/autoindex;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        allow 10.0.0.1;
        #如果使用all,一定放在最后面
        deny all;
    }
}
 
 
例题:只允许指定ip,其他全部拒绝。
[root@web01 ~]# vim /etc/nginx/conf.d/www.autoindex.com.conf
server {
    listen 80;
    server_name www.autoindex.com;
    charset utf8;
    location / {
        root /code/autoindex;
        index index.html;
    }
    location /download {
        root /code/autoindex;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        allow 10.0.0.1;
        #如果使用all,一定放在最后面
        deny all;
    }
}
 
例题:只允许10.0.0.1访问,拒绝改网段其他ip
[root@web01 ~]# vim /etc/nginx/conf.d/www.autoindex.com.conf
server {
    listen 80;
    server_name www.autoindex.com;
    charset utf8;
    location / {
        root /code/autoindex;
        index index.html;
    }
    location /download {
        root /code/autoindex;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        allow 10.0.0.1;
        #如果使用all,一定放在最后面
        deny 10.0.0.0/24;
    }
}
 

3.访问认证模块

 
需要用到的模块工具
模块:ngx_http_auth_basic_module
工具: yum -y install htpasswd
 
创建密码文件:
[root@web01 ~]# htpasswd -c /etc/nginx/auth_basic lhd
New password:
Re-type new password:
Adding password for user lhd
#添加一个登录用户
[root@web01 ~]# htpasswd /etc/nginx/auth_basic egon
New password:
Re-type new password:
Adding password for user egon
 
配置访问登录
使用关键字:
auth_basic on;
auth_basic_user_file /etc/nginx/auth_basic;
 
添加位置:http, server, location
 

 

4.更多模块配置请前往:

 
 
 

四、常用服务。

1.反向代理(反向代理、负载均衡、七层负载均衡都是这货)

例子:
upstream  server {         #server为集群名字可以随便写
    server 192.168.159.10:80;                #不加端口默认为80
    server 192.168.159.20:80;
}
 
server {    
    ……
    location / {
        proxy_pass http://server;
}
}
分配策略:
轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
weight(轮询几率): 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。
ip_hash:用户第一次访问的是那一台服务器,接下来访问的都是那一台服务器。
upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}
fari(第三方): 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
    server server1;
    server server2;
    fair;
}
url_hash(第三方): 按访问url的hash结果来分配请求,使每个url定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}
 
附加:
proxy_pass http://backserver/;
upstream backserver{
    ip_hash;
    server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
    server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
 

2.四层负载均衡

需要安装的模块:--with-srearm
安装后配置文件修改:
把配置文件里面整个http删了,换成:
stream {
}
案例1要求使用192.168.15.6的1234端口链接192.168.15.5的22端口
            [root@lb02 stream.conf]# cat ssh.conf
            upstream ssh {
                server 172.16.1.5:22;
            }
            server {
                listen 1234;
                proxy_pass ssh;
            }
案例2:要求使用192.168.15.6的33060端口代理192.168.15.51的3306端口
 
            [root@lb02 stream.conf]# cat mysql.conf
            upstream mysql {
                server 172.16.1.51:3306;
            }
 
 
            server {
                listen 33060;
                proxy_pass mysql;
            }
 

3.https加密(单机)。

模块:--with-http_ssl_module
 
关于实验用证书获取的两种方式:
1.阿里云免费申请。(有小绿锁)
2.自己生成。(没有小绿锁)
生成证书:
openssl genrsa -out cert.key
openssl req -new -x509 -key cert.key -out cert.pem
 
修改配置文件(添加)
server {
    listen       443 ssl;
    ……
            ssl_certificate      /etc/local/nginx/conf/cert.pem;    
        ssl_certificate_key  /etc/local/nginx/conf/cert.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
 
 
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;    
}
 
测试修改是否正确
[root@web02 conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
重启nginx
[root@web02 conf]# /usr/local/nginx/sbin/nginx -s reload
 

4.全站https。

以下是配置没什么好说的了
 
upstream backserver {
        server 172.16.1.7:80;
        server 172.16.1.8:80;
        server 172.16.1.9:80;
}
 
 
server {
    listen 80;
    server_name www.mycentos.top;
    return 301 https://www.mycentos.top;
}
server {
    listen 443 ssl;
    server_name www.mycentos.top;
    ssl_certificate      /usr/local/nginx/conf/server.pem;
    ssl_certificate_key  /usr/local/nginx/conf/server.key;
    ssl_prefer_server_ciphers  on;
    location / {
        proxy_pass http://backserver;
}
}
 
 
 

 ······待完善········

nginx重点优化合集一

nginx特色

  • 支持高并发

  • 资源消耗少

  • 负载均衡

  • 缓存功能

  • 支持异步网络


nginx虚拟主机

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    include  extra/www.conf;

    include  extra/blog.conf;

    include  extra/status.conf;

    }

vim     ../conf/extra/www.conf              

server {

        listen       80;

        server_name  www.hequan.com   hequan.com;

        location / {

            root   html/www;

            index  index.html index.htm;

        }

}

server {

        listen       80;

        server_name  status.hequan.com;

        location / {

        stub_status  on;     //打开状态信息开关

        access_log  off;

        }

}


nginx日志

     错误日志      //官方文档 http://nginx.org/en/docs/ngx_core_module.html#error_log

nginx重点优化合集

error_log    logs/error.log     error;  //关键字    日志文件    错误日志级别:一般用warn|error|crit   crit为记录最少错误信息

error_log   /dev/null   crit;    //关闭日志信息记录

     访问日志               //http://nginx.org/en/docs/http/ngx_http_log_module.html

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  gzip  buffer=32k   flush=5s;          //放在http,server,localtion,if in localtion,limit_except


     切割日志    

             脚本切割

vim  cut_nginx_log.sh          //把nginx日志改名为带日期格式的新文件,然后平滑重启,生成新的日志

#!/bin/sh

Dateformat=`date +%Y%m%d`

Basedir="/application/nginx"

Nginxlogdir="$Basedir/logs"

Logname="access"

[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1

[ -f ${Logname}.log ] || exit 1

/bin/mv ${Logname}.log ${Logname}_${Dateformat}.log

$Basedir/sbin/nginx  -s reload



cat >> /var/spool/cron/root <<EOF                 

#cut  nginx   access log by hequan

00 00 * * *  /bin/sh  /hequan/sh/cut_nginx_log.sh >/dev/null  2>&1

EOF


补充

#删除7天前的日志

find . -mtime +7 -name "20[1-9][1-9]*" | xargs rm -f 


开启nginx目录文件列表显示功能


正常访问nginx的话是显示nginx欢迎页,也就是/nginx/html/index.html文件;

如果要显示/html/目录下所有的文件,需要打开目录文件列表显示;

在nginx.conf主配置文件中http或location代码段中,配置一段代码即可实现;

http {

    include       mime.types;

    default_type  application/octet-stream;

    autoindex on;

    autoindex_exact_size off;

    autoindex_localtime on;

autoindex on;    自动显示目录

autoindex_exact_size off; 

默认为on,显示出文件的确切大小,单位是bytes。

改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

autoindex_localtime on;

默认为off,显示的文件时间为GMT时间。

改为on后,显示的文件时间为文件的服务器时间


location   匹配标识    匹配的网站网址     配置URI后要执行的配置段

~ 区分大小写    ~*不区分大小写    ^~ 进行常规匹配后,不做正则表达式检查

location  ^~   /images/ {

     return  404;

}

location  ~*  \.(gif|jpg|jpep)$  {    //正则匹配

      return 500;

}

location = / {} //精确匹配

location  /documents/ {}  //匹配常规字符串  有正则,先匹配正则

location / {}   所有lcoation都不能匹配后的默认匹配


nginx  rewrite    实现url地址重写

server    hequan.com;

rewrite   ^/(.*)     http://www.hequan.com/$1   permanent;                 //$1=(.*)    

permanent是永久301重定向标记      last匹配后,继续向下匹配           break配置完及终止              redirect返回302临时重定向


nginx访问日志

location  /{

     auth_basic                   "提示字符";

     auth_basic_user_file         conf/htpasswd;

}                     //可用Apache的htpasswd生成密码文件

yum -y install httpd-tools

htpasswd   -c  -m /application/nginx/conf/htpasswd  hequan


LNMP

nginx                                          PHP5                                                           mysql

     fastcgi_passFastCGI→   mysql_connet()      → connect DBMS→       

                                                  mysql_select_db()   → connect Database→   data                               

     



 


本文出自 “何全” 博客,请务必保留此出处http://hequan.blog.51cto.com/5701886/1784366

以上是关于nginx合集的主要内容,如果未能解决你的问题,请参考以下文章

编程技巧│超实用 nginx 中常见的配置合集

NGINX PHP 报错整理合集

企业级nginx服务优化合集

Nginx小功能合集

编程技巧│超实用 nginx 中常见的配置合集

编程技巧│超实用 nginx 中常见的配置合集