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";
}
清除 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]: