
nginx基础
- xxcdu
- Application , Data
- April 13, 2025
Table of Contents
[TOC]
一、启动nginx
systemctl start nginx
systemctl restart nginx #修改配置文件后重启
ps -ef | grep nginx #查看nginx进程
sudo systemctl status nginx #查看nginx状态
二、nginx.conf配置参数含义
nginx配置文件位置:/etc/nginx
1、worker-processes:设定工作进程数,一般按CPU核数来
2、events{ }:事件,内部参数worker_connection:一个worker能同时处理的连接数
3、http{ }:内部参数:
(1)include将配置项引入nginx.conf,例如类型支持配置mine.types,若nginx服务器发送给浏览器的资源类型双方都无法识别则浏览器会下载到本地。nginx配置多个网站时,可以给每个网站设置单独的配置文件,再用include引用到主配置文件中,可以放在conf.d文件夹:
include /etc/nginx/conf.d/*.conf; #引入所有.conf文件
如果要弃用该网站,直接将其配置文件改名令其不以.conf结尾即可。
(2)server{ }:配置网站,一个server{ }配置一个网站。
listen:nginx默认端口。
server_name:配置域名。
autoindex:on 开启目录浏览功能。
location / { }指定站点根目录,root指根路径,index指默认的index页面。
(2.1)在location里可以配置服务器开启gzip压缩,设置最小压缩文件、内存缓存、压缩等级(1-9级,压缩等级越高,压缩出来越小,但是压缩用时越长)、要压缩的文件类型。
(2.2)location内可以配置访问控制(应用层),显示403 forbidden
deny 192.168.52.30 # (加黑)
allow 0.0.0.0/0 #(加白) 所有ip都有白名单
(2.3)nginx可以在一个server里配置多个location单独对某些路径进行控制。例如
location /a { basic认证 } # 给/a目录加一个basic认证。
location /a { root /web } # nginx可以给配置多个站点根目录,访问该网站/a目录时其实访问的/web/a
location支持使用通配符,若多个location访问目录冲突,通过符号设置优先级:
~:一个正则匹配,区分大小写;~*:一个证则匹配,不区分大小写; =:针对文件,精准匹配不支持正则。
location ~* ^.*\.txt$ { return 404 } # 禁止访问所有开头的.txt文件(\\是转义点号.的),第一个~*是指在任何目录,第二个.\*是指任何命名的
(2.4)return :跳转。server_name为www.xxcdu.com , return https: // www.xxcdu.com $request_uri , 访问www.xxcdu.com的80端口时可以将所有页面和资源跳转到443端口的https连接,rewrite也可用于跳转,可以通过curl查看跳转细节。如果想在浏览器输入xxcdu.com就跳转到https,则要额外配置一个server,server_name为xxcdu.com。
(3)charset UTF-8设定字符集
(4)log_format定制日志格式,在nginx配置文件中设置改格式后取个名字,可以直接在某个网站的配置文件中通过名字指定使用该格式。里面可以使用中文和代指参数的变量。例如:
log-format xxcdu '[$time_local] 代理的ip:$remote_addr 客户端真实ip:$http_x_forwarded_for "$request" $status $bytes_sent $http_user_agent'
引用xxcdu格式:
access_log /path(xxcdu所在配置文件的路径) xxcdu
三、简单识别提供nginx服务的主机
网页进入开发者模式查看操作系统,若是windows上部署的nginx或者Apache,会有一个win字样,例如win nginx1.14.0。
四、nginx日志
nginx日志:/var/log/nginx
linux系统安全日志:/var/log/secure
五、centos配置静态IP的NAT模式的虚拟机不能上网可能原因
其两套网络管理工具NetworkManager和network都工作时会产生冲突,必须关掉一个再重启网卡:systemctl stop NetworkManager
六、用户nginx
nginx主进程是由用户nginx创建的,要在一些root用户才能读写的文件里存放查看日志需要chown改变权限设置。注意nginx要读取的所有文件都必须要求用户nginx对其有读取权限。
因此出现403的情况有三种:nginx禁止访问、没有首页HTML文件、nginx用户对其没有读权限。
七、nginx常用变量
$args :查询参数,请求中的参数。(url中问号后面的内容)
$document_root : nginx虚拟机配置文件中的root根目录
$http_user_agent :客户端详细信息,即浏览器标识。可通过curl -A指定,如curl -A ‘xxcdu/999.0’ 192.168.52.230
$host:请求头的host域名
$http_referer:从哪一个url跳转过来的,可以用来防盗链(让用户从别人的服务器下载资源白嫖人家流量),在location中组织逻辑检测referer是否来自本网站目录。
$connection:是否为长连接
$remote_addr:客户端ip
$status:状态码
……
八、nginx + php做动态页面
安装php-fpm,将php-fpm的user和group配置成nginx,修改nginx配置指向fpm
九、常见架构
lnmp:linux + nginx + mysql + php
lamp:linux + apache + mysql + php
wamp:linux + nginx + mysql + php
lnmt:linux + nginx + mysql + tomcat #一般是java项目
lnmu:linux + nginx + mysql + uwsgi #一般是python项目
十、nginx反向代理
在location中配置:
proxy_pass http://192.168.52.131 #将请求ip转发到哪个地址,并且应该加一个DNS解析记录将域名指向代理服务的ip。
proxcy_set_header Host $host; #nginx代理服务器转发时会把请求头中的host字段直接修改成对应的ip地址,可能导致找不到想访问的网站,需要添加改配置把host设置回原来的域名。
proxy_set_header X-Real-IP $remote_addr; #简称XFF,用来记录客服端真实ip地址,否则日志里面全是代理服务器的ip
十一、nginx负载均衡
在server{ }外配置
upstream name(给资源池起个名字){
server 192.168.58.131
server 192.168.58.132
}