Nginx
文档
- nginx documentation - 官网
- Nginx的安装及配置详解 - 博客
安装
bash
$ yum install nginx
默认文件位置
- 配置文件夹:
/etc/nginx/
- log文件夹:
/var/log/nginx/
常用指令
bash
service nginx stop
service nginx start
service nginx restart
service nginx reload
nginx -t
nginx -s stop
nginx -s quit
nginx -s reload
nginx -s reopen
ps -ax | grep nginx
kill -s QUIT $id
# 设置开机启动
systemctl enable nginx.service
reload 异常
DANGER
sh
$ nginx -s reload
nginx: [error] invalid PID number "" in "/run/nginx.pid"
/run/nginx.pid
文件为空,或者不是当前的主进程号了。
sh
# 查看配置文件的地址
$ nginx -t
# 重新加载配置文件,再执行reload
$ nginx -c /etc/nginx/nginx.conf
$ nginx -s reload
常用配置
禁止未绑定域名访问
比如通过ip地址访问
nginx
server {
listen 80 default_server;
server_name _;
return 403;
}
配置 https,并开启 http2
- 域名型(DV)免费SSL证书申请流程 - 腾讯云文档
- Nginx服务器SSL证书安装部署 - 腾讯云文档
INFO
腾讯云账号可以申请50个证书,单个域名,有效期3个月,过期重新申请。
- 将已获取到的
域名_bundle.crt
证书文件和域名.key
私钥文件从本地目录拷贝到服务器的/etc/nginx
目录下 - 编辑
nginx.conf
文件
nginx
server {
listen 443 ssl http2;
server_name 域名;
ssl_certificate 域名_bundle.crt;
ssl_certificate_key 域名.key;
}
http 跳转到 https
nginx
server {
listen 80;
server_name 域名;
return 301 https://$host$request_uri;
}
反向代理
nginx
server {
listen 80;
server_name xxxx.zdzhangdi.cn;
server_tokens off;
location / {
allow xxx;
deny all;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:xxx;
}
}
root和alias
- root:root路径+location路径
- alias:使用alias路径替换location路径,后面必须要用“/”结束,只能放在locaiton中
nginx
location / {
root /zd-web/www/;
}
# /projects/server/nginx.html -> /zd-web/www/projects/server/nginx.html
location /note/ {
alias /zd-web/www-note/;
}
# /note/course.html -> /zd-web/www-note/course.html
try_files
- 路径是需要按照给定的root或alias为根路径来查找
- 按顺序匹配,使用第一个找到的文件
- 如果没有找到,返回404;如果最后一个不是404,则返回最后配置的文件
nginx
root /home/www/xxx;
try_files $uri $uri/index.html /index.html =404;
# 如果访问的是`http://test.zdzhangdi.cn/projects/server/nginx`,依次寻找的是:
# 1. /home/www/xxx/projects/server/nginx
# 2. /home/www/xxx/projects/server/index.html
# 3. /home/www/xxx/index.html
防盗与缓存
nginx
location ~* \.(jpg|jpeg|png|svg|gif|ico)$ {
add_header Cache-Control "public;max-age=2592000";
valid_referers 域名;
if ($invalid_referer) {
return 404;
}
}
禁止 iframe 引用
- X-Frame-Options - MDN
nginx
# http 或 server 中添加
add_header X-Frame-Options SAMEORIGIN;
配置记录
匹配符 | 匹配方式 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写的不匹配正则 | 5 |
!~* | 不区分大小写的不匹配正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |
说明 | |
---|---|
$args | 请求中的参数 |
$content_length | HTTP请求信息里的"Content-Length" |
$content_type | 请求信息里的"Content-Type" |
$document_root | 针对当前请求的根路径设置值 |
$document_uri | 与$uri相同 |
$host | 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名 |
$limit_rate | 对连接速率的限制 |
$request_method | 请求的方法,比如"GET"、"POST"等 |
$remote_addr | 客户端地址 |
$remote_port | 客户端端口号 |
$remote_user | 客户端用户名,认证用 |
$request_filename | 当前请求的文件路径名 |
$request_body_file | 前请求的文件 |
$request_uri | 请求的URI,带查询字符串 |
$query_string | 与$args相同 |
$scheme | 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect |
$server_protocol | 请求的协议版本,"HTTP/1.0"或"HTTP/1.1" |
$server_addr | 服务器地址 |
$server_name | 请求到达的服务器名 |
$server_port | 请求到达的服务器端口号 |
$uri | 请求的URI,可能和最初的值有不同,比如经过重定向之类的 |
遇到问题
📝 设置普通用户启动 nginx
nginx 的 user 使用的是默认 nobody,用普通用户上传到自己目录下,启动后一直 403,暂时将 user 设为了 root