源码安装

  1. curl -O https://nginx.org/download/nginx-1.20.0.tar.gz
  2. tar -xvf nginx-1.20.0.tar.gz
  3. cd nginx-1.20.0
  4. paru -S pcre pcre-devel // 使nginx可以解析正则表达式
  5. paru -S zlib zlib-devel // 使nginx可以通过gzip对请求进行压缩
  6. paru -S openssl openssl-devel //可以使用ssl套接字安全层
  7. ./configure
  8. make install

常用命令

注:在下文中的/Nginx代表为 nginx的安装目录。

Nginx服务可以接收的信号:

信号 作用
TERM或INT 快速停止Nginx服务
QUIT 平缓停止Nginx服务
HUP 使用新的配置文件启动进程,之后平缓停止原有进程,即“平缓重启”
USR1 重新打开日志文件,常用于日志切割。
USR2 使用新版本的Nginx文件启动服务,之后平缓停止原有Nginx进程,即“平缓升级”
WINCH 平缓停止 worker process,用于 Nginx 服务器平滑升级

使用方法:

  1. kill SIGNAL PID
  • SIGNAL即TERM、INT、QUIT等
  • PID即 nginx的 进程ip,PID。

    启停命令:

    Nginx的停止:

    使用Nginx -g命令:

    1. nginx -g TERM // 快速停止Nginx服务
    2. nginx -g INT // 快速停止Nginx服务
    3. nginx -g QUIT // 平缓停止Nginx服务

    使用kill命令:

    1. kill TERM `/Nginx/logs/nginx.pid`;
    2. kill QUIT `/Nginx/logs/nginx.pid`;
    3. kill INT `/Ngnix/logs/nginx.pid`;

    使用nginx -s命令:

    1. nginx -s stop

    Nginx的配置检查:

    通用的Nginx的配置检查: nginx -t
    只输出错误信息的配置检查: nginx -q

    Nginx的启动:

    Nginx的启动:nginx

    Nginx的重启

    使用nginx -g命令:

    1. nginx -g HUP

    使用nginx -s命令:

    1. nginx -s reload

    nginx的 -s 参数:

  • stop

  • quit
  • reopen
  • reload

    Nginx的升级

    1. nginx -g USR2;
    2. kill USR2 `/Nginx/logs/nginx.pid`;
    3. kill WINCH `/Nginx/logs/nginx.pid`;

    Nginx主进程的查看

  • 查看logs文件夹下的 nginx.pid 的内容

  • 使用以下命令:
    1. ps -ef | grep nginx | grep master

    基础配置

    ```nginx

    user nobody;

    worker_processes 1;

events { worker_connections 1024; }

http { include mime.types; default_type application/octet-stream;

  1. sendfile on;
  2. keepalive_timeout 65;
  3. server {
  4. listen 80;
  5. server_name localhost;
  6. location / {
  7. root html;
  8. index index.html index.htm;
  9. }
  10. }

}

  1. <a name="SkXqQ"></a>
  2. ## 配置websocket
  3. 当我们需要使用`nginx`转发`websocket`的时候,可以参考下面的配置:
  4. ```nginx
  5. location ws/ {
  6. proxy_pass http://localhost:8081/saas-admin/ws;
  7. proxy_http_version 1.1;
  8. proxy_set_header X-Client-IP $remote_addr;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection 'upgrade';
  11. proxy_set_header Host $host;
  12. proxy_set_header X-Real_IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. proxy_connect_timeout 600s;
  15. proxy_read_timeout 36000s;
  16. proxy_send_timeout 36000s;
  17. }

配置反向代理

  1. location /api {
  2. proxy_pass http://localhost:8000; #代理地址
  3. proxy_set_header Host $proxy_host; #设置代理的请求主机
  4. proxy_set_header X-Real-IP $remote_addr; #转发请求的IP地址
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设置代理的转发
  6. proxy_set_header X-NginX-Proxy true;
  7. underscores_in_headers on; # 使请求头的下划线生效
  8. }

常见问题

在nginx中,默认是不支持以下划线(_)连接的请求头的,如果请求头中要带下划线,可以设置:underscores_in_headers on

在绑定一些接口的时候,出现bind() to 0.0.0.0:8000 failed (13: Permission denied)错误。

出现上面的错误的原因多数是发生在SELinux中。原因只能绑定一些指定的端口。如果要修改,需要使用下面的命令:

  1. semanage port -l | grep http_port_t
  2. http_port_t tcp 80,81,443,4898,8008,8009,8443,9000

如果想要加入自己的端口号,可以使用下面的方法:

  1. semanage port -a -t http_port_t -p tcp 8090

如果有报错说没有找到semanage命令可以这样安装:[安装semanage](https://www.yuque.com/silencezhpf/linux/questions#mmgXT)