Nginx笔记

117 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

系统指令

CentOS切换

Ctrl + Alt + F1 切换图形模式
Ctrl + Alt + F3 切换命令行模式

查看ip

ip addr

修改ip

vim /etc/sysconfig/network-scripts/ifcfg-eth0

重启网络服务

systemctl restart network

请求 Web 服务器

curl(client-url)

# 只显示头信息
curl url -I
# 带referer访问
curl url -e 'http//www.baidu.com' -I 'http://www.baidu.com/img/23424.png'

阮一峰:curl 的用法指南

查看进程

ps -ef | grep nginx
ps -aux | grep nginx

杀进程

kill PID
kill -9 PID

nginx命令

# 命令列表
nginx -h
# 检查配置文件
nginx -t
# 启动
nginx -s start
nginx -c /etc/nginx/nginx.conf
# 关闭
nginx -s stop
# 重启Nginx
nginx -s reopen
# 重新加载Nginx配置文件,然后以优雅的方式重启Nginx 
nginx -s reload
# 强制停止Nginx服务
nginx -s stop
# 优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -s quit

系统服务启动nginx

# 系统服务启动nginx(脚本启动)
systemctl start nginx
# 开机启动nginx
systemctl enable nginx.service

防火墙相关命令

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
systemctl stop firewalld.service
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
# 指定端口和ip访问
# 指定tcp协议的192.168.44.101可以访问8080端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.44.101" port protocol="tcp" port ="8080" accept"
# 移除指定端口和ip访问
# 移除指定tcp协议的192.168.44.101可以访问8080端口
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.44.101" port protocol="tcp" port ="8080" accept"
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

Nginx配置


user nginx;
# 启动的worker_processes数量,一般对应cpu内核数
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    # 去除拷贝过程(进阶)
    # sendfile            on;
    # keepalive_timeout   65;

    # 引入文件,mime.types告诉浏览器解析的类型对应的文件类型
    include             /etc/nginx/mime.types;
    # 默认解析的类型:流文件
    default_type        application/octet-stream;


    # 别名(负载均衡:轮询下列服务器)
    # 轮询问题:无法保持会话,用token解决会话保持
    upstream httpds {
        # weight 服务器权重
        server localhost:8080  weight=8;
        # backup 备用服务器
        server localhost:8081  weight=2 backup;
        # up 服务器上线(默认)
        # down 服务器下线
        server localhost:8081  weight=1 down;
    }


    # 虚拟主机 vhost 网关服务器
    server {
        # 端口号
        # 默认监听0.0.0.0:80(root)或者0.0.0.0:8080(非root)
        # 一个单独的ip,默认监听80端口
        # 一个单独的端口,默认监听所有的ip接口
        listen       80;
        listen       [::]:80;
        # 域名 or 主机名(localhost)
        server_name  _ localhost www.google.com;
        # root         /usr/share/nginx/html;

        # 匹配的uri
        location / {
            # root   /usr/share/nginx/html;
            # index  index.html index.htm;
            # try_files $uri $uri/ /index.html;
            # expires 7d;
            # 重定向
            # break 匹配结束
            # last 匹配到最后一个
            # redirect 返回302临时重定向,浏览器url发生变化
            # permanent 返回301永久重定向,浏览器url发生变化
            rewrite ^/([0-9]+).html$ /index.js?pageNum=$1 break;
            # 反向代理,重定向到新的地址
            # proxy_pass 和 root 二选一
            # 不支持反向代理到https
            # proxy_pass http://localhost:8080/;
            # 负载均衡 httpds为前文定义的别名
            proxy_pass http://httpds;
        }

        # 静态资源
        location ~*/(js|css|img) {
            # 防盗链
            # none:没有referer时可以访问
            # server_names 检测是否是允许访问的地址中的一个
            valid_referers none server_names;
            if ($invalid_referer) {
            #    return 403;
                # 盗链图片直接转到默认图片
                rewrite ^/ /img/x.png break;
            }
            #
            root   html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
            expires 7d;
        }

        error_page 401 402 403 404 /40x.html;
        location = /40x.html {
            root index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root index.html index.htm;
        }
    }
}

nginx serverName匹配规则

server_name www.google.com  # 完全匹配,多个选第一个
server_name *pattern        # 通配符在前,多个选最长
server_name pattern*        # 通配符在后,多个选最长
server_name ~pattern        # 正则表达式
server_name _               # 匹配不到则找到第一个监听端口的server块(隐式default_server)。

nginx location匹配规则

location = /uri         # 精确匹配
location ^~ uri         # 普通字符匹配(如果该选项匹配,则只匹配该选项,不再向下匹配其他选项,普通字符匹配长>短)
location ~ pattern      # 正则匹配(区分大小写,与~*不分前后)
location ~* pattern     # 正则匹配(不区分大小写,与~不分前后)
location /uri           # 前缀匹配(普通字符匹配长>短)
location /              # 默认匹配

理解Nginx中Server和Location的匹配逻辑

彻底弄懂 Nginx location 匹配