nginx常用命令

632 阅读8分钟

nginx常用命令

目录

[TOC]

1、 安装启动nginx

//安装nginx
yum install nginx
//启动nginx
nginx 
//使用命令nginx -t查找nginx配置文件
并使用vi命令修改该配置文件
nginx -t
vi /etc/nginx/nginx.conf

2、 查看nginx是否正常运行

 ps -ef |grep nginx
 netstat -lntp  //查看所有被主机监听的端口

3、 停止nginx/重启nginx

nginx -s stop
nginx -s reload

4、 修改配置文件

nginx -t
vi /etc/nginx/nginx.conf
nginx -s reload

5、 再配置一个端口

server {
        listen 80;
        ...
    }
 
server {
        listen 9090;
        server_name chen;
        root /home/html/chen;
 
        location /{
                
        }
    }

7、nginx下一个server配置多个location

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  interview;
        root         /home/mayun/interview/;
        location / {
          
        }
        location  ^~ /gis/ {
          alias  /home/gis/new_york/;
        }
  }      

Nginx虚拟目录alias和root目录

nginx是通过alias设置虚拟目录,在nginx的配置中,alias目录和root目录是有区别的:

  • 1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
  • 2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
  • 3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!
  • 4)alias虚拟目录配置中,location匹配的path目录如果后面不带"/",那么访问的url地址中这个path目录后面加不加"/"不影响访问,访问时它会自动加上"/";     但是如果location匹配的path目录后面加上"/",那么访问的url地址中这个path目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!
  • 5)root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。

举例说明(比如nginx配置的域名是www.wangshibo.com):

示例一
location /huan/ {
      alias /home/www/huan/;
}

在上面alias虚拟目录配置下,访问 www.wangshibo.com/huan/a.html 实际指定的是 /home/www/huan/a.html。
注意:alias指定的目录后面必须要加上"/",即/ home/www/huan /不能改成 /home/www/huan

上面的配置也可以改成root目录配置,如下,这样nginx就会去 /home/www/huan 下寻找 www.wangshibo.com/huan 的访问资源,两者配置后的访问效果是一样的!

location /huan/ {
       root /home/www/;
}
示例二

上面的例子中alias设置的目录名和location匹配访问的path目录名一致,这样可以直接改成root目录配置;那要是不一致呢?

location /web/ {
      alias /home/www/html/;
}
 

访问www.wangshibo.com/web的时候就会去/h…
这样的话,还不能直接改成root目录配置。
如果非要改成root目录配置,就只能在/home/www下将html->web(做软连接,即快捷方式),如下:

# ln -s /home/www/web /home/www/html       //即保持/home/www/web和/home/www/html内容一直
示例三

所以,一般情况下,在nginx配置中的良好习惯是:
1)在location /中配置root目录;
2)在location /path中配置alias虚拟目录。

  server {
    listen 80;
    server_name www.wangshibo.com;
    index index.html index.php index.htm;
    access_log /usr/local/nginx/logs/image.log;
 
    location / {
      root /var/www/html;
    }
 
    location /haha {
      #  匹配的path目录haha不需要真实存在alias指定的目录中,后面的"/"符号一定要带上
      alias /var/www/html/ops/;
      rewrite ^/opp/hen.php(.*)$ /opp/hen.php?s=$1 last;
      # rewrite ^/opp/(.*)$ /opp/hen.php?s=$1 last;
    }
    #  匹配的path目录wang一定要真实存在root指定的目录中(就/var/www/html下一定要有wang目录存在)
    location /wang {
      root /var/www/html;
    }
 
  }
示例四
 server {
    listen 80;
    server_name www.kevin.com;
 
    access_log /data/nginx/logs/www.kevin.com-access.log main;
    error_log /data/nginx/logs/www.kevin.com-error.log;
 
    location / {
      root /data/web/kevin;
      index index.php index.html index.htm;
    }
 
    location /document/ {
      alias /data/web/document/;
    }
 
  }
 
  # 如上配置后,则:
  # 访问http://www.kevin.com/admin   就会找到/data/web/kevin/admin目录
  # 访问http://www.kevin.com/document  就会找到/data/web/document 目录 (里面是一些静态资源)
总结
  server {
    listen 80;
    listen [::]:80;
    server_name _;
    root /usr/share/nginx/html;
 
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
 
    location / {
      root /var/sph;
      index index.html index.htm;
      try_files $uri $uri/ /index.html; # 解决刷新404
    }
 
    #alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
    #location /document/ {
    # alias /var/web/document/;
    #}
 
    #root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的
    # location /document/ {
    #   root /var/web/;
    # }
 
    # /web/ 会直接替换为/var/web/document
    # location /web/ {
    #   alias /var/web/document/;
    # }
 
    # 这样的话,还不能直接改成root目录配置。 因为目录称为了/var/web/web/
    # location /web/ {
    #   root /var/web/;
    # }
 
    # 匹配的path目录web不需要真实存在alias指定的目录中
    # 匹配的path目录web一定要真实存在root指定的目录中
 
 
    # 配置代理
    location /dev/ {
      # 设置代理目标
      proxy_pass http://sph-h5-api.atguigu.cn/;
    }
    error_page 404 /404.html;
    location = /404.html {
    }
 
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
  }

Nginx路由匹配规则的一些理解

使用过nginx的同学都知道,在nginx配置文件中通过location配置路由转发规则,配置语法为:

location   [=|~|~*|^~]    /uri/   { 
          ...
}

中括号中为路由匹配符号,常见的有:

1  =:精确匹配
2  ^~:精确前缀匹配
3  ~:区分大小写的正则匹配
4  ~*:不区分大小写的正则匹配
5  /uri:普通前缀匹配
6  /:通用匹配
精确匹配

精确匹配使用 表示,nginx进行路由匹配的时候,精确匹配具有最高的优先级,请求一旦精确匹配成功nginx会停止搜索其他到匹配项

配置实例

location = /test {
        ...
}
精确前缀匹配

精确前缀匹配的优先级仅次于精确匹配,nginx对一个请求精确前缀匹配成功后,停止继续搜索其他到匹配项

配置实例

location ^~ /test_a {
        ...
}
正则匹配

正则匹配分为区分大小写和不区分大小写两种,分别用 ~~ * 表示;一个请求精确匹配和精确前缀匹配都失败后,如果配置有相关的正则匹配location,nginx会尝试对该请求进行正则匹配。需要说明的是正则匹配之间没有优先级一说,而是按照在配置文件中出现的顺序进行匹配,一旦匹配上一个,就会停止向下继续搜索

配置实例

# 配置1
location ~ /test_a {
        ...
}
 
# 配置2  
location ~* /test_A {
        ...
}

对于请求 /test_a/hello 来说会被匹配到 配置1 处理, /test_A/hello 则会被匹配给 配置2 处理

普通前缀匹配

普通前缀匹配前面没有任何修饰符,直接在location后写需要匹配的uri,它的优先级次于正则匹配

配置实例

location /img {
        ...
}
通用匹配

通用匹配使用一个 / 表示,可以匹配所有请求,一般nginx配置文件最后都会有一个通用匹配规则,当其他匹配规则均失效时,请求会被路由给通用匹配规则处理;如果没有配置通用匹配,并且其他所有匹配规则均失效时,nginx会返回 404 错误

配置实例

location / {
        ...
}
引用一个完整例子

nginx路由规则配置:

location = / {
   echo "规则A";
}
location = /login {
   echo "规则B";
}
location ^~ /static/ {
   echo "规则C";
}
location ^~ /static/files {
    echo "规则X";
}
location ~ \.(gif|jpg|png|js|css)$ {
   echo "规则D";
}
location ~* \.png$ {
   echo "规则E";
}
location /img {
    echo "规则Y";
}
location / {
   echo "规则F";
}
请求uri匹配路由规则
http://localhost/规则A
http://localhost/login规则B
http://localhost/register规则F
http://localhost/static/a.html规则C
http://localhost/static/files/a.txt规则X
http://localhost/a.png规则D
http://localhost/a.PNG规则E
http://localhost/img/a.gif规则D
http://localhost/img/a.tiff规则Y

清除 Nginx

1.首先输入命令 ps -ef | grep nginx检查一下nginx服务是否在运行。

[root@localhost /]# ps -ef |grep nginx
root       3163   2643  0 14:08 tty1     00:00:00 man nginx
root       5427      1  0 14:50 ?        00:00:00 nginx: master process nginx
nginx      5428   5427  0 14:50 ?        00:00:00 nginx: worker process
root       5532   2746  0 14:52 pts/0    00:00:00 grep --color=auto nginx

2.停止Nginx服务

[root@localhost /]# /usr/sbin/nginx -s stop
[root@localhost /]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1261/sshd           
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1261/sshd

3.查找、删除Nginx相关文件

查看Nginx相关文件:whereis nginx
[root@localhost /]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz

find查找相关文件

[root@localhost /]# find / -name nginx
/usr/lib64/perl5/vendor_perl/auto/nginx
/usr/lib64/nginx
/usr/share/nginx
/usr/sbin/nginx
/etc/logrotate.d/nginx
/etc/nginx
/var/lib/nginx
/var/log/nginx

依次删除find查找到的所有目录:rm -rf /usr/sbin/nginx

4.再使用yum清理

[root@localhost /]# yum remove nginx
依赖关系解决
 
======================================================================================================
 Package                              架构            版本                       源              大小
======================================================================================================
正在删除:
 nginx                                x86_64          1:1.12.2-3.el7             @epel          1.5 M
为依赖而移除:
 nginx-all-modules                    noarch          1:1.12.2-3.el7             @epel          0.0  
 nginx-mod-http-geoip                 x86_64          1:1.12.2-3.el7             @epel           21 k
 nginx-mod-http-image-filter          x86_64          1:1.12.2-3.el7             @epel           24 k
 nginx-mod-http-perl                  x86_64          1:1.12.2-3.el7             @epel           54 k
 nginx-mod-http-xslt-filter           x86_64          1:1.12.2-3.el7             @epel           24 k
 nginx-mod-mail                       x86_64          1:1.12.2-3.el7             @epel           99 k
 nginx-mod-stream                     x86_64          1:1.12.2-3.el7             @epel          157 k
 
事务概要
======================================================================================================
移除  1 软件包 (+7 依赖软件包)
 
安装大小:1.9 M
是否继续?[y/N]: