源码安装
curl -O https://nginx.org/download/nginx-1.20.0.tar.gz
tar -xvf nginx-1.20.0.tar.gz
cd nginx-1.20.0
paru -S pcre pcre-devel // 使nginx可以解析正则表达式
paru -S zlib zlib-devel // 使nginx可以通过gzip对请求进行压缩
paru -S openssl openssl-devel //可以使用ssl套接字安全层
./configure
make install
常用命令
注:在下文中的
/Nginx
代表为 nginx的安装目录。
Nginx服务可以接收的信号:
信号 | 作用 |
---|---|
TERM或INT | 快速停止Nginx服务 |
QUIT | 平缓停止Nginx服务 |
HUP | 使用新的配置文件启动进程,之后平缓停止原有进程,即“平缓重启” |
USR1 | 重新打开日志文件,常用于日志切割。 |
USR2 | 使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,即“平缓升级” |
WINCH | 平缓停止 worker process,用于 Nginx 服务器平滑升级 |
使用方法:
kill SIGNAL PID
- SIGNAL即TERM、INT、QUIT等
-
启停命令:
Nginx的停止:
使用
Nginx -g
命令:nginx -g TERM // 快速停止Nginx服务
nginx -g INT // 快速停止Nginx服务
nginx -g QUIT // 平缓停止Nginx服务
使用
kill
命令:kill TERM `/Nginx/logs/nginx.pid`;
kill QUIT `/Nginx/logs/nginx.pid`;
kill INT `/Ngnix/logs/nginx.pid`;
使用
nginx -s
命令:nginx -s stop
Nginx的配置检查:
通用的Nginx的配置检查: nginx -t
只输出错误信息的配置检查: nginx -qNginx的启动:
Nginx的重启
使用
nginx -g
命令:nginx -g HUP
使用
nginx -s
命令:nginx -s reload
nginx的 -s 参数:
stop
- quit
- reopen
-
Nginx的升级
nginx -g USR2;
kill USR2 `/Nginx/logs/nginx.pid`;
kill WINCH `/Nginx/logs/nginx.pid`;
Nginx主进程的查看
查看logs文件夹下的 nginx.pid 的内容
- 使用以下命令:
ps -ef | grep nginx | grep master
基础配置
```nginxuser nobody;
worker_processes 1;
events { worker_connections 1024; }
http { include mime.types; default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
<a name="SkXqQ"></a>
## 配置websocket
当我们需要使用`nginx`转发`websocket`的时候,可以参考下面的配置:
```nginx
location ws/ {
proxy_pass http://localhost:8081/saas-admin/ws;
proxy_http_version 1.1;
proxy_set_header X-Client-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_connect_timeout 600s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
}
配置反向代理
location /api {
proxy_pass http://localhost:8000; #代理地址
proxy_set_header Host $proxy_host; #设置代理的请求主机
proxy_set_header X-Real-IP $remote_addr; #转发请求的IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设置代理的转发
proxy_set_header X-NginX-Proxy true;
underscores_in_headers on; # 使请求头的下划线生效
}
常见问题
在nginx中,默认是不支持以下划线(_)连接的请求头的,如果请求头中要带下划线,可以设置:underscores_in_headers on
。
在绑定一些接口的时候,出现bind() to 0.0.0.0:8000 failed (13: Permission denied)
错误。
出现上面的错误的原因多数是发生在SELinux
中。原因只能绑定一些指定的端口。如果要修改,需要使用下面的命令:
semanage port -l | grep http_port_t
http_port_t tcp 80,81,443,4898,8008,8009,8443,9000
如果想要加入自己的端口号,可以使用下面的方法:
semanage port -a -t http_port_t -p tcp 8090
如果有报错说没有找到
semanage
命令可以这样安装:[安装semanage](https://www.yuque.com/silencezhpf/linux/questions#mmgXT)