2024-08-17

要配置Nginx以支持WSS(WebSocket Secure),你需要在Nginx配置文件中设置SSL,并将WebSocket的流量代理到Workerman服务。以下是一个基本的配置示例:

  1. 生成SSL证书(如果你还没有):



sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
  1. 配置Nginx:



server {
    listen 443 ssl;
    server_name your_domain.com;
 
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
 
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
 
    location / {
        proxy_pass http://your_workerman_server_ip:workerman_port;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }
}

确保替换your_domain.com、证书路径和your_workerman_server_ip:workerman_port为你的实际域名、SSL证书路径和Workerman服务器的IP地址和端口号。

  1. 确保Workerman服务监听相应的端口(例如,如果Workerman监听1234端口,确保Nginx配置中的proxy_pass指向这个端口)。
  2. 重启Nginx服务以应用新配置:



sudo systemctl restart nginx

确保Workerman服务也在运行中,并且正确配置以处理WebSocket连接。

以上配置假设你已经在服务器上安装了Nginx和Workerman,并且Workerman已经设置好监听WebSocket连接。如果你还没有设置Workerman,你需要确保Workerman的worker正确处理WebSocket连接,例如:




use Workerman\Worker;
 
$worker = new Worker('websocket://your_domain.com:workerman_port');
$worker->onMessage = function($connection, $data) {
    // 处理消息
};
 
Worker::runAll();

替换your_domain.com:workerman_port为你的域名和端口号。

2024-08-17

以下是一个简化的Docker部署PHP运行环境(php-fpm + nginx)的示例。

首先,创建一个Dockerfile来构建PHP环境:




FROM php:7.4-fpm
 
# 安装PHP扩展
RUN docker-php-ext-install pdo pdo_mysql
 
# 安装Nginx
RUN apt-get update && apt-get install -y nginx
 
# 配置Nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 
# 默认情况下,PHP-FPM 不会在后台运行,所以我们需要修改php-fpm.conf
RUN sed -i 's/^daemonize = yes/daemonize = no/' /etc/php/7.4/fpm/php-fpm.conf
 
# 将nginx的配置文件链接到默认位置,这样就可以通过stdin将其覆盖
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
    ln -sf /dev/stderr /var/log/nginx/error.log
 
# 启动PHP-FPM和Nginx
CMD ["php-fpm", "&&", "nginx", "-g", "daemon off;"]

然后,创建一个docker-compose.yml文件来定义服务:




version: '3'
 
services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/var/www/html
    ports:
      - "9000:9000"
  nginx:
    image: nginx:latest
    volumes:
      - .:/var/www/html
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "8080:80"

最后,创建一个nginx.conf文件来配置Nginx:




server {
    listen 80;
    index index.php index.html index.htm;
    error_log  /dev/stderr    notice;
    access_log /dev/stdout;
    root /var/www/html;
 
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

这样,通过运行以下命令,你可以在本地机器上部署PHP运行环境:




docker-compose up -d

这将启动一个包含PHP-FPM和Nginx的Docker容器,其中PHP-FPM监听9000端口,Nginx监听80端口。你可以将你的PHP代码放在当前目录下,它将被挂载到容器的/var/www/html目录中,并且可以通过Nginx或PHP-FPM来访问。

2024-08-17

在Windows下配置Nginx和PHP,你可以按照以下步骤操作:

  1. 下载Nginx和PHP。

  2. 安装Nginx。

    • 解压下载的Nginx压缩包到你选择的目录。
    • 双击nginx.exe启动Nginx。
  3. 配置PHP。

    • 解压下载的PHP压缩包到你选择的目录。
    • 编辑php.ini文件,通常在php.ini-developmentphp.ini-production基础上修改。
    • 启用扩展(例如,通过去掉extension=mysqli前面的;来启用mysqli扩展)。
  4. 配置Nginx与PHP处理PHP文件。

    • 编辑Nginx配置文件(通常在Nginx安装目录下的confconf\nginx.conf)。
    • server块中添加或修改location块以处理PHP文件:



location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
  1. 启动PHP内置的FastCGI服务器。

    • 打开命令提示符或PowerShell。
    • 运行php-cgi.exe -b 127.0.0.1:9000
  2. 测试配置。

    • 创建一个简单的PHP文件,如index.php,内容如下:



<?php
phpinfo();
?>
  • 在浏览器中访问http://localhost,如果一切正常,你将看到PHP信息页面。

请注意,这是一个基本的配置,根据你的具体需求,你可能需要进行更复杂的配置,比如设置错误日志位置、配置虚拟主机、启用SSL等。此外,确保你的Nginx和PHP路径设置正确,以及防火墙设置不会阻止Nginx或PHP的端口。

2024-08-17

报错解释:

这个错误表明Nginx配置文件中的location指令出现在了错误的上下文中。location指令用于定义HTTP请求的处理规则,它应该在serverhttp块内部使用,但不能直接用在文件的最顶级或其他地方。

解决方法:

  1. 打开/etc/nginx/nginx.conf或指定配置文件/etc/nginx/defa进行编辑。
  2. 检查location指令所在的位置,确保它位于server块内部。如果不在,请将其移动到正确的位置。
  3. 确保没有任何语法错误,比如缺少大括号{}或其他不匹配的括号。
  4. 保存配置文件并退出编辑器。
  5. 运行nginx -t检查配置文件是否正确。
  6. 如果检查显示配置文件没有问题,重新加载Nginx配置使更改生效,使用命令sudo nginx -s reload

例子:

错误配置:




http {
    location / {
        # ...
    }
}

正确配置:




http {
    server {
        location / {
            # ...
        }
    }
}
2024-08-17



# 安装 Nginx 和 Node.js
sudo apt-get update
sudo apt-get install -y nginx nodejs
 
# 创建 Node.js 应用目录
mkdir -p ~/myapp/{bin,proc,logs,etc}
 
# 创建 Node.js 应用的启动脚本
cat << 'EOF' > ~/myapp/bin/www
#!/usr/bin/env node
console.log('Node.js app is running...')
EOF
chmod +x ~/myapp/bin/www
 
# 创建 Systemd 服务文件
cat << 'EOF' > ~/myapp.service
[Unit]
Description=My Node.js App
After=network.target
 
[Service]
Type=simple
WorkingDirectory=/home/ubuntu/myapp
ExecStart=/usr/bin/node /home/ubuntu/myapp/bin/www
Restart=on-failure
User=ubuntu
Group=ubuntu
Environment=NODE_ENV=production
 
[Install]
WantedBy=multi-user.target
EOF
 
# 将服务文件复制到 Systemd 目录
sudo mv ~/myapp.service /etc/systemd/system/
 
# 重新加载 Systemd 配置
sudo systemctl daemon-reload
 
# 启动服务并设置开机自启
sudo systemctl start myapp.service
sudo systemctl enable myapp.service
 
# 配置 Nginx 反向代理到 Node.js 应用
echo "server {
    listen 80;
    server_name example.com;
 
    location / {
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header Host \$http_host;
        proxy_set_header X-NginX-Proxy true;
 
        proxy_pass http://localhost:3000/;
        proxy_redirect off;
    }
}" | sudo tee /etc/nginx/sites-available/default
 
# 重新加载 Nginx 配置
sudo systemctl reload nginx

这段代码展示了如何在一个基于 Ubuntu 的系统上快速部署一个 Node.js 应用,并且使用 Systemd 管理应用进程,以及 Nginx 作为反向代理。这是一个简化的示例,实际部署时需要根据具体的 Node.js 应用和服务器配置进行调整。

2024-08-16

在Linux系统中,要设置Nginx服务开机自启动,通常可以使用系统的服务管理工具。大多数现代的Linux发行版使用systemd作为初始化系统和服务管理器。以下是设置Nginx开机自启的步骤:

  1. 确保Nginx已安装。
  2. 启用Nginx服务,以便在开机时自动启动。
  3. (可选)检查Nginx服务的启动状态。

以下是相应的命令:




# 安装Nginx(如果尚未安装)
sudo apt-get update
sudo apt-get install nginx
 
# 启用Nginx开机自启
sudo systemctl enable nginx
 
# 启动Nginx服务
sudo systemctl start nginx
 
# (可选)检查Nginx服务状态
sudo systemctl status nginx

systemctl enable命令将Nginx设置为开机自启动。systemctl start命令立即启动Nginx服务。systemctl status命令可以用来检查Nginx的运行状态。

请根据您使用的Linux发行版和版本,适当调整上述命令。例如,在Red Hat系的发行版中,可能需要使用yumdnf代替apt-get

2024-08-16

要在Linux系统中定期清理Nginx日志,你可以使用logrotate工具,它是一个应用于日志文件的管理工具,可以用来自动旋转、压缩、删除和邮寄日志文件。

首先,确保logrotate已经安装。如果没有安装,可以使用包管理器进行安装,例如在Debian或Ubuntu上:




sudo apt-get install logrotate

接下来,创建一个logrotate配置文件或编辑已有的配置文件。通常,Nginx的日志文件通常位于/var/log/nginx/目录下。

创建一个新的配置文件,例如/etc/logrotate.d/nginx,并添加以下内容:




/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

解释一下这个配置:

  • daily:日志文件将每天轮换一次。
  • missingok:如果日志文件不存在,不要报错。
  • rotate 7:保留7天内的日志文件。
  • compress:通过gzip压缩轮换出去的日志文件。
  • delaycompress:压缩操作将推迟到下一次轮换。
  • notifempty:如果日志文件为空,则不进行轮换。
  • create 0640 nginx adm:轮换后创建新的日志文件,设定权限和所有者。
  • sharedscripts:这是一个可选的指令,它表明postrotate脚本将在所有日志文件轮换之后运行一次。
  • postrotate/endscript:在日志文件轮换之后运行的脚本,这里是发送USR1信号给Nginx,让其重新打开日志文件。

这样配置后,logrotate会自动按照你的设定进行日志文件的管理。确保你的logrotate配置是正确的,可以使用logrotate命令手动测试配置:




sudo logrotate /etc/logrotate.d/nginx

最后,设置一个cron任务来定期执行logrotate




sudo crontab -e

添加以下行到crontab文件中,以每天凌晨1点执行logrotate




0 1 * * * /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1

保存并退出编辑器,这样就完成了定期清理Nginx日志的设置。

2024-08-16

在Linux下安装Nginx并配置SSL模块以支持HTTPS的基本步骤如下:

  1. 安装Nginx:



sudo apt update
sudo apt install nginx
  1. 安装SSL证书生成工具Certbot:



sudo apt install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
  1. 生成SSL证书:



sudo certbot --nginx -d your_domain.com -d www.your_domain.com
  1. 配置Nginx以使用SSL:

    编辑Nginx的配置文件 /etc/nginx/sites-available/default 或者对应的域名配置文件。




server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;
 
    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256 ...';
 
    # ... 其他配置 ...
 
    location / {
        # ... 配置你的网站 ...
    }
}
 
server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$server_name$request_uri;
}
  1. 重新加载Nginx配置:



sudo systemctl reload nginx

以上步骤会安装Nginx,生成SSL证书,并配置Nginx以使用SSL证书进行HTTPS加密。记得替换 your_domain.com 为你自己的域名。

2024-08-16



# 安装依赖
sudo apt-update
sudo apt install -y openjdk-11-jre-headless
 
# 下载kkFileView v4.0.0
wget https://github.com/kekingcn/file-online-preview/releases/download/4.0.0/kkFileView-4.0.0.zip
 
# 解压缩
unzip kkFileView-4.0.0.zip
 
# 配置nginx
sudo tee /etc/nginx/sites-available/kkfileview <<EOF
server {
    listen 80;
    server_name your_domain_or_IP;
 
    location / {
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header Host \$http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:8012;
        proxy_http_version 1.1;
        proxy_cache_bypass \$http_upgrade;
    }
}
EOF
 
# 创建软链接
sudo ln -s /etc/nginx/sites-available/kkfileview /etc/nginx/sites-enabled/
 
# 检查nginx配置并重启nginx
sudo nginx -t
sudo systemctl restart nginx
 
# 启动kkFileView
cd kkFileView-4.0.0
chmod +x bin/*.sh
./bin/start.sh

以上脚本提供了从下载、解压到配置nginx和启动kkFileView的完整流程。确保替换your_domain_or_IP为你的域名或IP地址。在执行这些步骤之前,请确保你已经安装了unzipwget。如果没有安装,可以通过执行sudo apt install unzip wget来安装。

2024-08-16

以下是一个简化的实例,展示如何配置Nginx以实现动静分离和负载均衡。




# /etc/nginx/nginx.conf
 
user  nginx;
worker_processes  1;
 
events {
    worker_connections  1024;
}
 
http {
    include       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;
 
    keepalive_timeout  65;
 
    # 动静分离
    server {
        listen       80;
        server_name  localhost;
 
        # 静态文件
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|html)$ {
            root /var/www/static;
            expires 30d;
        }
 
        # 动态请求
        location / {
            proxy_pass http://dynamic_backend;
            include /etc/nginx/proxy_params;
        }
    }
 
    # 负载均衡配置
    upstream dynamic_backend {
        server backend1.example.com;
        server backend2.example.com;
    }
}

在这个配置中,我们定义了一个名为dynamic_backend的upstream块,其中包含了两个后端服务器。然后在server块中,我们通过proxy\_pass指令把所有非静态文件的请求代理到这个upstream。静态文件则直接从/var/www/static目录提供,并设置了30天的缓存过期时间。这样就实现了动静分离和负载均衡。