# 从本地拷贝文件到远程服务器[需要指定拷贝的目的地文件直接在路径后面再跟上文件的名称就可以]
scp nginx-1.20.1.tar.gz [email protected]:/opt/packages
# 从远程服务器拷贝文件到本地[需要指定拷贝的目的地文件直接在路径后面再跟上文件的名称就可以]
scp [email protected]:/home/root/others/music /home/space/music/1.mp3
# 拷贝文件夹
scp -r www.runoob.com:/home/root/others/ /home/space/music/
**注意:
**这个scp命令只能在linux系统下可以使用,一般都是安装了linux操作系统的堡垒机或跳板机中使用,如果是windows,可以直接借助ftp客户端工具进行文件上传下载
# 文件解压缩命令
tar -zxf nginx-1.20.1.tar.gz
# 编译命令[需要进入到nginx-1.20.1.tar.gz解压文件的根目录下,configure可执行文件在根目录下]
./configure --prefix=/usr/local/software/nginx --error-log-path=/usr/local/software/nginx/logs/error.log --http-log-path=/usr/local/software/nginx/logs/access.log --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/software/nginx/client --http-proxy-temp-path=/usr/local/software/nginx/proxy --http-fastcgi-temp-path=/usr/local/software/nginx/fastcgi --http-uwsgi-temp-path=/usr/local/software/nginx/uwsgi --http-scgi-temp-path=/usr/local/software/nginx/scgi --with-http_stub_status_module --with-http_ssl_module
# 编译命令
make
# 安装命令
make install
需要先进入安装好的目录/usr/local/nginx/sbin
【因为这里暂时还没有配置环境变量】
# 没有配置环境变量需要先进入到nginx的安装目录下的sbin目录进行服务的启动
#【默认nginx.conf启动】
./nginx
#【指定配置文件启动】
./nginx -c conf/nginx.conf
#【快速停止nginx服务】
./nginx -s stop
#【优雅关闭,在退出前完成已经接受的连接请求】
./nginx -s quit
#【重新加载配置】
./nginx -s reload 重新加载配置
需要在/usr/lib/systemd/system
目录下创建一个配置文件nginx.service,添加内容如下:
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/software/nginx/logs/nginx.pid
ExecStartPre=/usr/local/software/nginx/sbin/nginx -t -c /usr/local/software/nginx/conf/nginx.conf
ExecStart=/usr/local/software/nginx/sbin/nginx -c /usr/local/software/nginx/conf/nginx.conf
ExecReload=/usr/local/software/nginx/sbin/nginx -s reload
ExecStop=/usr/local/software/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/software/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
# 启动nginx
systemctl start nginx
systemctl start nginx.service
# 重启nginx
systemctl restart nginx
systemctl restart nginx.service
# 停止nginx
systemctl stop nginx
systemctl stop nginx.service
# 查看nginx的运行状态
systemctl status nginx.service
systemctl status nginx.service -l
# 设置成开机自启动
systemctl enable nginx.service
# 关闭开机自启动
systemctl disable nginx.service
# 添加开放端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
# 查询所有开放端口列表
firewall-cmd --list-ports
# 移除开放端口
firewall-cmd --zone=public --remove-port=9000/tcp --permanent
# 重新加载防火墙规则
firewall-cmd --reload
# 启动防火墙
systemctl start firewalld.service
# 重启防火墙
systemctl restart firewalld.service
# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的运行状态
systemctl status firewalld.service
systemctl status firewalld.service -l
安装好nginx之后,修改配置文件下的server中监听的端口为一个未被占用的端口,重新启动nginx,通过i浏览器访问http://服务器IP:端口
【这里服务器IP就是安装了nginx服务的机器的ip地址,如果是云服务器就是这台机器的公网IP,端口就是刚才修改的配置文件的监听端口】
如上图,则nginx的环境就搭建好了,下面就可以来玩一玩一些比较常见的配置操作了
nginx的核心配置都是在安装目录下的conf/nginx.conf
文件中进行配置的
server {
# 标准HTTP协议
listen 80;
# 标准HTTPS协议
listen 443 ssl;
# HTTP2
listen 443 ssl http2;
# 使用IPv6侦听80端口
listen [::]:80;
# 只使用IPv6侦听80端口
listen [::]:80 ipv6only=on;
}
server {
# 相对或者绝对的日志文件路径【这里注意如果使用相对路径的起始路径默认是nginx的安装目录】
access_log /path/to/file.log;
# 是否开启访问日志【默认是开启的】
access_log on;
}
server {
# 主机IP或者域名
server_name mydomain.com;
# 监听多个IP或者域名时,使用空格进行分隔
# server_name mydomain.com www.mydomain.com;
# 监听所有的域
server_name *.mydomain.com;
# 监听所有的顶级域名
server_name mydomain.*;
# Listen to unspecified Hostnames (Listens to IP address itself)
server_name "";
}
server {
listen 80;
server_name mydomain.com;
location / {
// 网站的静态资源的访问的根目录在服务器上面的存放路径
root /path/to/website;
}
}
server {
listen 80;
server_name www.mydoamin.com;
# 当请求当前网站首页时,将请求重定向到下面这个请求路径上
return 301 http://mydoamin.com$request_uri;
}
server {
listen 80;
server_name www.mydoamin.com;
# 当请求网站指定的请求路径时,将请求重定向到下面这个请求路径上
location /redirect-url {
return 301 http://otherdomain.com;
}
}
nginx的反向代理配置通过proxy_pass
进行配置
server {
listen 80;
server_name mydomain.com;
# 下面这个location配置的含义就是主机下的80端口是,会将所有的请求的代理到 http://0.0.0.0:10000下进行处理
location / {
proxy_pass http://0.0.0.0:10000;
}
}
反向代理存在一个问题就是会默认代理重定向,导致服务端如果想要获取请求端的请求头数据信息无法获取,这时需要作如下配置,关闭代理重定向,设置代理请求头
server {
listen 80;
server_name mydomain.com;
# 下面这个location配置的含义就是主机下的80端口是,会将所有的请求的代理到 http://0.0.0.0:10000下进行处理
location / {
proxy_redirect off;
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://0.0.0.0:10000;
}
}
# 负载均衡的配置文件下发如下: 定义一个app_request变量[可以任意命名,但是不能使用配置文件的关键字]代理多个服务端
upstream app_request {
server 0.0.0.0:10000;
server 0.0.0.0:10001;
server 116.131.73.102:8080;
}
server {
listen 80;
server_name mydomian.com;
location / {
# 配置了负载均衡之后,这里不能再使用某个后端服务,而是需要使用 负载均衡配置中使用的app_request变量,切记
proxy_pass http://app_request ;
}
}
##### **weight(权重)**
# 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpds {
# down:表示当前的server暂时不参与负载
server 127.0.0.1:8050 weight=10 down;
# weight:默认为1.weight越大,负载的权重就越大。
server 127.0.0.1:8060 weight=1;
# backup: 其它所有的非backup机器down或者忙的时候,请求backup机器
server 127.0.0.1:8060 weight=1 backup;
}
server {
# https协议默认使用443端口
listen 443 ssl;
# 侦听域名
server_name mydomain.com;
# 开启ssl协议
ssl on;
# 证书所在路径【一般就放在配置文件nginx.conf同级目录,其他自定义位置也可以】
ssl_certificate /path/to/cert.pem;
# 私钥所在路径【一般就放在配置文件nginx.conf同级目录,其他自定义位置也可以】
ssl_certificate_key /path/to/privatekey.pem;
ssl_stapling on;
ssl_stapling_verify on;
# 中间证书所在路径【中间证书,这个可以自己生成,具体操作可以参考我另外一篇博客https://blog.csdn.net/qq_41865652/article/details/116048879】
ssl_trusted_certificate /path/to/fullchain.pem;
# ssl协议版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl协议超时时间
ssl_session_timeout 1h;
# sslsession缓存大小
ssl_session_cache shared:SSL:50m;
# ssl安全创术请求请求头过期时间
add_header Strict-Transport-Security max-age=15768000;
}
# http永久重定向到https配置如下
server
{
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
rewrite [flag];
关键字 正则表达式 替代内容 flag标记
rewrite参数的标签段位置【rewrite可以定义在server中、location中、if判断中】:
flag标记说明:
# 当请求/shop/details?shopId=1时,将请求重写成/shop/details/1.html
rewrite ^/shop/details/1.html$ /shop/details?shopId=1 last;
# 当请求/shop/details?shopId=*时,将请求重写成/shop/details/*.html
rewrite ^/shop/details/(.+).html$ /shop/details?shopId=$1 last;
location /css {
# root用来设置根目录,而alias在接受请求的时候在路径上不会加上location
# 使用root的写法
root /usr/local/nginx/static;
# 使用alias的写法
# alias /usr/local/nginx/static/css;
}
location /images {
root /usr/local/nginx/static;
# 使用alias的写法
# alias /usr/local/nginx/static/images;
}
location /js {
root /usr/local/nginx/static;
# 使用alias的写法
# alias /usr/local/nginx/static/js;
}
使用正则
location 前缀
没有前缀 匹配以指定模式开头的location
= 精准匹配,不是以指定模式开头
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
^~ 非正则匹配,匹配以指定模式开头的location
location匹配顺序
多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
location ~*/(css|images|js) {
root /usr/local/nginx/static;
index index.html index.htm;
}