nginx 配置
nginx 版本:1.26
安装 Nginx
rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.26.2-1.el8.ngx.x86_64.rpm
yum install -y nginx
systemctl start nginx.service
systemctl status nginx.service
nginx -s reload
systemctl reload nginx.service
systemctl restart nginx.service
设置开机自启
systemctl enable nginx
检查状态:nginx -t
default.conf
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root /usr/share/nginx/html;
# }
# 定义错误页面
error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 /error_pages/index.html;
# 确保路径正确,并使用 alias 定义错误页面路径
location /error_pages/ {
# return text - ok
# default_type text/plain; # 文本格式
# return 404 'Not Found Page...';
# return json - ok
# default_type application/json; # json格式
# return 200 '{"code": "500","msg": "系统出错啦!"}';
internal;
alias /usr/share/nginx/html/;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# 监听 443 端口(但不启用有效的 SSL 配置)
server {
listen 443 default_server ssl;
listen [::]:443 default_server ssl;
server_name _; # 匹配任何 IP 地址
# 空的 SSL 配置(防止 Nginx 报错)
ssl_certificate /path/to/xxx.crt;
ssl_certificate_key /path/to/xxx.key;
# 强制重定向到 80 端口
return 301 http://$host$request_uri;
# 即使不需要,也保留根目录配置
root /usr/share/nginx/html;
index index.html index.php;
}
your_domain.conf 【不带ssl】
server {
listen 80;
# listen 443 ssl;
server_name www.domain.com domain.com;
# ssl on; #nginx 高板本需要该参数了
# ssl_certificate /path/to/xxx.crt; #(证书公钥)
# ssl_certificate_key /path/to/xxx.key; #(证书私钥)
access_log /var/log/nginx/host.access.log main;
charset utf-8;
root /path/to/public;
index index.php index.html;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 不带www 的全部跳转到www 域名
# if ($host != 'www.domain.com') {
# return 301 https://www.$host$request_uri;
# }
# 全部不带www
if ($host = 'www.domain.com') {
return 301 https://domain.com$request_uri;
}
# 方法一:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
# if ($server_port = 443){
# return 301 http://$host$request_uri;
# }
# 方法二:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
# if ($scheme = http ) {
# return 301 https://$host$request_uri;
# }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# 默认 路径
location / {
# # alias /path/to/public/;
# root /path/to/public/;
# index index.php index.html index.htm;
################ 跨域处理 ################
# 允许跨域的请求,可以自定义变量$http_origin,*表示所有
add_header 'Access-Control-Allow-Origin' *;
# 允许携带cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
# 允许跨域请求的方法:GET,POST,OPTIONS,PUT
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
# 允许请求时携带的头部信息,*表示所有
add_header 'Access-Control-Allow-Headers' *;
# 允许发送按段获取资源的请求
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
# 一定要有!!!否则Post请求无法进行跨域!
# 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
# 对于Options方式的请求返回204,表示接受跨域请求
return 204;
}
# 当上游响应的响应码'大于等于'300[常见"404"、"500"等]时; 按error_page指令处理
proxy_intercept_errors on;
# 创建自己的404.html页面 需要放在 nginx 的html路径下
fastcgi_intercept_errors on;
# try_files $uri $uri/ /index.php?$query_string;
# 文件和目录不存在的时重定向
if (!-e $request_filename) {
# rewrite ^(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php last;
break;
}
}
# 资源缓存
# location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)
# ~代表匹配时区分大小写
# .*代表任意字符都可以出现零次或多次,即资源名不限制
# \.代表匹配后缀分隔符.
# (html|...|css)代表匹配括号里所有静态资源类型
# 该配置表示匹配以.css~.webm为后缀的所有资源请求。
location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
log_not_found off;
# 关闭日志
access_log off;
# 缓存时间7天
expires 7d;
# 源服务器
# proxy_pass http://localhost:8888;
# 指定上面设置的缓存区域
proxy_cache imgcache;
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
# 定义错误页面
# error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 @jump_to_error;
location @jump_to_error {
# # return text - ok
# # default_type text/plain; # 文本格式
# # return 404 'Not Found Page...';
# return json - ok
default_type application/json; # json格式
return 200 '{"code": "500","msg": "系统出错啦!"}';
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+?\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
include fastcgi_params;
}
if (!-e $request_filename) {
# rewrite ^(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php last;
break;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
your_domain.conf 【带ssl】
server {
listen 80;
listen 443 ssl;
server_name www.domain.com domain.com;
#ssl on; #nginx 高板本需要该参数了
ssl_certificate /path/to/xxx.crt; #(证书公钥)
ssl_certificate_key /path/to/xxx.key; #(证书私钥)
access_log /var/log/nginx/host.access.log main;
charset utf-8;
root /path/to/public;
index index.php index.html;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 不带www 的全部跳转到www 域名
# if ($host != 'www.domain.com') {
# return 301 https://www.$host$request_uri;
# }
# 全部不带www
if ($host = 'www.domain.com') {
#return 301 $scheme://domian.com$request_uri;
return 301 https://domain.com$request_uri;
# return 301 https://$http_host$request_uri;
}
# 方法一:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
# if ($server_port = 443){
# return 301 http://$host$request_uri;
# }
if ($server_port = 80){
rewrite ^(/.*)$ https://$host$1 permanent;
}
# 方法二:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
# if ($scheme = http ) {
# return 301 https://$host$request_uri;
# }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# 默认 路径
location / {
# # alias /path/to/public/;
# root /path/to/public/;
# index index.php index.html index.htm;
################ 跨域处理 ################
# 允许跨域的请求,可以自定义变量$http_origin,*表示所有
add_header 'Access-Control-Allow-Origin' *;
# 允许携带cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
# 允许跨域请求的方法:GET,POST,OPTIONS,PUT
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
# 允许请求时携带的头部信息,*表示所有
add_header 'Access-Control-Allow-Headers' *;
# 允许发送按段获取资源的请求
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
# 一定要有!!!否则Post请求无法进行跨域!
# 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
# 对于Options方式的请求返回204,表示接受跨域请求
return 204;
}
# 当上游响应的响应码'大于等于'300[常见"404"、"500"等]时; 按error_page指令处理
proxy_intercept_errors on;
# 创建自己的404.html页面 需要放在 nginx 的html路径下
fastcgi_intercept_errors on;
# try_files $uri $uri/ /index.php?$query_string;
# 文件和目录不存在的时重定向
if (!-e $request_filename) {
# rewrite ^(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php last;
break;
}
}
# 资源缓存
# location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)
# ~代表匹配时区分大小写
# .*代表任意字符都可以出现零次或多次,即资源名不限制
# \.代表匹配后缀分隔符.
# (html|...|css)代表匹配括号里所有静态资源类型
# 该配置表示匹配以.css~.webm为后缀的所有资源请求。
location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
log_not_found off;
# 关闭日志
access_log off;
# 缓存时间7天
expires 7d;
# 源服务器
# proxy_pass http://localhost:8888;
# 指定上面设置的缓存区域
proxy_cache imgcache;
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
# 定义错误页面
# error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 @jump_to_error;
location @jump_to_error {
# # return text - ok
# # default_type text/plain; # 文本格式
# # return 404 'Not Found Page...';
# return json - ok
default_type application/json; # json格式
return 200 '{"code": "500","msg": "系统出错啦!"}';
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+?\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
include fastcgi_params;
}
if (!-e $request_filename) {
# rewrite ^(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php last;
break;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
nginx.conf
# user nginx;
user www;
# 自动根据CPU核心数调整Worker进程数量
worker_processes auto;
error_log /var/log/nginx/error.log notice;
# pid /var/run/nginx.pid;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; # 开启高效传输模式
tcp_nopush on; # 减少网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
types_hash_max_size 2048;
######################## 大文件上传处理 ########################
# 上传文件的大小限制 默认1m
client_max_body_size 500m;
# 读取客户端请求头数据的超时时间 默认秒 默认60秒
client_header_timeout 120;
######################## 压缩 ########################
# 默认off,是否开启gzip
gzip on;
# 要采用 gzip 压缩的 MIME 文件类型,其中 text/html 被系统强制启用;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# ---- 以上两个参数开启就可以支持Gzip压缩了 ---- #
# 默认 off,该模块启用后,Nginx 首先检查是否存在请求静态文件的 gz 结尾的文件,如果有则直接返回该 .gz 文件内容;
gzip_static on;
# 默认 off,nginx做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩;
# off:关闭Nginx对后台服务器的响应结果进行压缩。
# expired:如果响应头中包含Expires信息,则开启压缩。
# no-cache:如果响应头中包含Cache-Control:no-cache信息,则开启压缩。
# no-store:如果响应头中包含Cache-Control:no-store信息,则开启压缩。
# private:如果响应头中包含Cache-Control:private信息,则开启压缩。
# no_last_modified:如果响应头中不包含Last-Modified信息,则开启压缩。
# no_etag:如果响应头中不包含ETag信息,则开启压缩。
# auth:如果响应头中包含Authorization信息,则开启压缩。
# any:无条件对后端的响应结果开启压缩机制。
gzip_proxied off;
# 用于在响应消息头中添加 Vary:Accept-Encoding,使代理服务器根据请求头中的 Accept-Encoding 识别是否启用 gzip 压缩;
gzip_vary on;
# gzip 压缩比,压缩级别是 1-9,1 压缩级别最低,9 最高,级别越高压缩率越大,压缩时间越长,建议 4-6;
gzip_comp_level 5;
# 获取多少内存用于缓存压缩结果,16 8k 表示以 8k*16 为单位获得;
gzip_buffers 16 8k;
# 允许压缩的页面最小字节数,页面字节数从header头中的 Content-Length 中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
# gzip_min_length 2k;
# 默认 1.1,启用 gzip 所需的 HTTP 最低版本;
gzip_http_version 1.1;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
######################## Nginx缓冲区 ########################
# 设置与后端服务器建立连接时的超时时间。默认为60s
proxy_connect_timeout 600s;
# 设置从后端服务器读取响应数据的超时时间 默认为60s
proxy_read_timeout 600s;
# 设置向后端服务器传输请求数据的超时时间 默认为60s
proxy_send_timeout 600s;
# 是否启用缓冲机制,默认为on关闭状态。
proxy_buffering on;
# 设置缓冲客户端请求数据的内存大小。
client_body_buffer_size 512k;
# 为每个请求/连接设置缓冲区的数量和大小,默认4 4k/8k。
proxy_buffers 4 512k;
# 设置用于存储响应头的缓冲区大小。
proxy_buffer_size 512k;
# 在后端数据没有完全接收完成时,Nginx可以将busy状态的缓冲返回给客户端,该参数用来设置busy状态的buffer具体有多大,默认为proxy_buffer_size*2
proxy_busy_buffers_size 512k;
# 设置每次写数据到临时文件的大小限制。
proxy_temp_file_write_size 2m;
# path是临时目录的路径
proxy_temp_path /var/temp_buffer;
######################## Nginx缓存 ########################
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大5G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 use_temp_path=on keys_zone=imgcache:100m inactive=1d max_size=5g;
# 对于相同的请求,是否开启锁机制,只允许一个请求发往后端。on | off;
# proxy_cache_lock on;
# 配置锁超时机制,超出规定时间后会释放请求。默认为5s。
# proxy_cache_lock_timeout 5;
# 当上游响应的响应码'大于等于'300[常见"404"、"500"等]时; 按error_page指令处理
proxy_intercept_errors on;
# 创建自己的404.html页面 需要放在 nginx 的html路径下
fastcgi_intercept_errors on;
include /etc/nginx/conf.d/*.conf;
}