文章目录
展开Nginx常见问题
错误日志关键字
# 参数详情
include fastcgi_params
php内置变量文件:
- $document_root
- $fastcgi_script_name
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_sript_name;
fastcgi_param HTTPS on; 前端使用ssl时,才可以添加
include proxy_params
代理的优化:
- 请求头带着域名访问后端
- 透传用户的IP地址到后端
- 缓存的大小
- 超时时间
日志关键字:
error # 错误
exception # 例外
unknown # 未知命令
not found # 未找到
connect refused # 拒绝
permission denied #权限不足
nginx 多 server优先级
## 优先级匹配顺序
1.首先选择所有的字符串完全匹配(精确匹配)的server_name。(完全匹配)
2.选择通配符在前面的server_name
3.选择通配符在后面的server_name
4.正则表达式的server_name
5.所有匹配规则相同时,哪个配置文件listen...后面加了default_server哪个优先级就最高
6.按照配置文件的顺序访问第一个配置文件
# 正则表达式
[root@web01 conf.d]# vim 1.conf
server {
listen 80;
server_name ~^(?<www>.+)\.howtocn\.org;
root /code/1;
index index.html;
}
# 完全匹配
[root@web01 conf.d]# cat 2.conf
server {
listen 80;
server_name www.hg.com;
root /code/2;
index index.html;
}
# 通配符
[root@web01 conf.d]# cat 3.conf
server {
listen 80;
server_name *.hg.com;
root /code/3;
index index.html;
}
# ip访问
[root@web01 conf.d]# cat 4.conf
server {
listen 80;
server_name _;
root /code/4;
index index.html;
}
禁止IP访问
## 禁止IP访问,并返回错误页面
[root@web01 ~]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
default_type text/json;
return 500 "页面500 ,给爷爬~";
}
server {
listen 80;
server_name www.hg.com;
root /code/2;
index index.html;
}
## 禁止IP访问,并跳转到主站点
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
root /code/2;
index index.html;
}
nginx包含其他子配置文件include
include /etc/ngxinx/stream.d/*.conf
include /etc/nginx/fastcgi_params
include /etc/nginx/proxy_parmas ## 自己创建的 代理优化参数
## 可以创建一个需要生效的配置文件 把要生效的配置放到这个目录
[root@web01 conf.d]# mkdir /etc/nginx/conf.d/online
## 创建一个不需要生效的配置文件 把不要生效的配置放到这个目录
[root@web01 conf.d]# mkdir /etc/nginx/conf.d/offline
## 修改nginx主配置文件 把include指定的文件替换如下
include /etc/nginx/conf.d/online/*.conf;
站点目录路径 root和 alias区别
## 1.root指定站点目录
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
location / {
root /code/2;
index index.html;
}
location ~ /images {
root /code/images;
}
}
# 此时系统去找的图片路径为 /code/images/images/1.png 它会去root指定的目录下 找location指定目录下的文件
## 2.alias指定站点目录
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
root /code/2;
index index.html;
location /images {
alias /images;
}
}
location /images {
alias /code/images;
}
# 此时系统去找的图片路径为 /code/images/1.png 它始终会去alias指定的目录下找文件
Nginx try_file路径匹配
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
root /code;
index index.html;
location / {
try_files $uri $uri/ @hg;
}
location @hg {
proxy_pass http://172.16.1.8:8080;
}
}
# 此时系统会先去$uri也就是你指定的uri找index.html文件
# 要是没有index.html文件 就会把$uri/ 也就是index.html当成一个目录 去这个目录下找文件
# 要是这个目录下也没有文件 就根据 @hg 去找指定的下面的location 然后输出location例指定的内容
nginx 调整上传文件的大小
# 在nginx主配置文件中http层添加以下内容
[root@web01 ~]# vim /etc/nginx/nginx.conf
http{
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location
...
}
隐藏nginx版本号
# 在nginx主配置文件中http层添加以下内容
[root@web01 ~]# vim /etc/nginx/nginx.conf
http{
server_tokens off;
...
}
nginx优雅的显示404错误页面
## 跳转页面
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
location / {
root /code;
index index.html;
error_page 404 http://www.baidu.com;
}
}
## 前端页面
[root@web01 code]# vim /etc/nginx/conf.d/ip.conf
server {
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.hg.com$1 redirect;
}
server {
listen 80;
server_name www.hg.com;
location / {
root /code;
index index.html;
error_page 404 /404.html;
}
}
## 前端图片页面案例
[root@web01 code]# vim /code/404.html
<img style='width:100%;height:100%;'
src=https://www.wodeyumengouwo.com/picture/404.jpg>
[root@web01 code]# vim /code/404.html
<html>
<head>
<meta charset="utf-8">
<title>错误页面</title>
</head>
<body>
<center><h1 style='background-color:red'>给爷爬~ 瞎访问,没有这个页面</h1></center>
<img style='width:100%;height:100%;'
src=https://www.wodeyumengouwo.com/picture/404.jpg>
</body>
</html>
nginx优化选项
## 静态资源读取
# 文件读取高效sendfile
tcp_nopush on;
# 将多个包一次发送,用于提升网络传输效率,大文件推荐打开,需要开启sendfile才行
Syntax: tcp_nopush on;
# 提高网络传输实时性,需要开启keepalive,来一个包发一个包不等待行
tcp_nodelay on;
## 静态资源压缩
# gzip传输压缩,传输前压缩,传输后解压
gzip on;
# 指定gzip压缩哪些类型文件
gzip_types image/jpeg image/gif image/png;
# gzip压缩比率,加快传输,但压缩本身比较耗费服务器性能
gzip_comp_level 2;
# gzip压缩协议版本,压缩使用在http哪个协议,主流选择1.1版本
gzip_http_version 1.1;
#防盗链demo
location / {
root /code/wordpress/bktp;
valid_referers none blocked server_name *.blackgoatking.com;
if ($invalid_referer){
rewrite ^(.*)$ /fdltpk/1656065486157.png break;
}
nginx通用优化
[root@nginx ~]# cat nginx.conf
user www; # nginx进程启动用户
worker_processes auto; # 与cpu核心一致即可
worker_cpu_affinity auto; # cpu亲和
error_log /var/log/nginx/error.log warn; # 错误日志
pid /run/nginx.pid;
worker_rlimit_nofile 35535; # 每个work能打开的文件描述符,调整至1w以上,负荷较高建议2-3w
events {
use epoll; # 使用epoll高效网络模型
worker_connections 10240; # 限制每个进程能处理多少个连接,10240x[cpu核心]
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8; # 统一使用utf-8字符集
# 定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 定义json日志格式
log_format json_access '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';
access_log /var/log/nginx/access.log main; # 访问日志
server_tokens off; # 禁止浏览器显示nginx版本号
client_max_body_size 200m; # 文件上传大小限制调整
# 文件高效传输,静态资源服务器建议打开
sendfile on;
tcp_nopush on;
# 文件实时传输,动态资源服务建议打开,需要打开keepalive
tcp_nodelay on;
keepalive_timeout 65;
# Gzip 压缩
gzip on;
gzip_disable "MSIE [1-6]\."; # 针对IE浏览器不进行压缩
gzip_http_version 1.1;
gzip_comp_level 2; # 压缩级别
gzip_buffers 16 8k; # 压缩的缓冲区
gzip_min_length 1024; # 文件大于1024字节才进行压缩,默认值20
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/jpeg;
# 虚拟主机
include /etc/nginx/conf.d/*.conf;
}
PHP服务优化
## php程序配置管理文件/etc/php.ini,主要调整日志、文件上传、禁止危险函数、关闭版本号显示等
#;;;;;;;;;;;;;;;;;
# Error logging ; #错误日志设置
#;;;;;;;;;;;;;;;;;
expose_php = Off # 关闭php版本信息
display_error = Off # 屏幕不显示错误日志
error_reporting = E_ALL # 记录PHP的每个错误
log_errors = On # 开启错误日志
error_log = /var/log/php_error.log # 错误日志写入的位置
date.timezone = Asia/Shanghai # 调整时区,默认PRC
#;;;;;;;;;;;;;;;
# File Uploads ; #文件上传设置
#;;;;;;;;;;;;;;;
file_uploads = On # 允许文件上传
upload_max_filesize = 300M # 允许上传文件的最大大小
post_max_size = 300M # 允许客户端单个POST请求发送的最大数据
max_file_uploads = 20 # 允许同时上传的文件的最大数量
memory_limit = 128M # 每个脚本执行最大内存
[Session] #会话共享
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379"
#php禁止危险函数执行(取决于实际情况,需要和开发沟通)
disable_functions = chown,chmod,pfsockopen,phpinfo
Comments | NOTHING