docker pull gg22mm/phpsys:nginx126
chmod u+x /home/data/docker/web/nginx/*.sh
docker run -d -t --name nginx126 --network=host --restart=always -v /home/data/docker/web:/usr/local/servers/web:rw gg22mm/phpsys:nginx126 /usr/local/servers/web/nginx/start.sh
docker exec -ti nginx126 /bin/bash
ps -ef | grep nginx
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //更新时间, 填: yes
date -R # 查看当前时间
'''
2025年新添加支持(ipv6:--with-ipv6,ip黑名单--without-http_access_module,):
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
sudo yum install GeoIP-devel.x86_64 # CentOS/RHEL 系统上,运行以下命令安装 GeoIP-devel
sudo apt-get install libgeoip-dev # Ubuntu/Debian 系统上
//最新 --with-cc-opt= 这些参数让Nginx在生产环境中运行更安全、更稳定、性能更好。
# CentOS/RHEL
yum install gcc gcc-c++ pcre-devel openssl-devel zlib-devel
yum install -y libxml2 libxml2-devel libxslt-devel
yum install gd-devel
yum install perl-IPC-Cmd # 或者安装开发工具包 yum groupinstall "Development Tools" yum install perl-core
# Ubuntu/Debian
apt-get install build-essential libpcre3-dev libssl-dev zlib1g-dev
apt install -y libxml2-dev libxslt-dev
apt-get install libgd-dev
apt-get install libipc-cmd-perl
# 下载支持 QUIC 的 OpenSSL
cd /usr/local/servers/
wget https://www.openssl.org/source/openssl-3.2.0.tar.gz #必须是这个版本,之前小于这个版会有错误
tar -zxvf openssl-3.2.0.tar.gz
cd /usr/local/servers/nginx-1.26.1
./configure --prefix=/usr/local/servers/nginx126 --with-threads --with-file-aio --with-pcre --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_geoip_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_slice_module --with-pcre-jit --with-http_image_filter_module --with-http_xslt_module --with-ipv6 --with-http_v3_module --with-select_module --with-poll_module --without-http_access_module --with-openssl="/usr/local/servers/openssl-3.2.0" --with-openssl-opt=enable-quic --with-cc-opt="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic" --with-ld-opt="-Wl,-z,relro -Wl,-E"
这个配置适合生产环境使用,功能全面且性能优化到位。编译完成后,您将获得一个功能强大的Nginx服务器!
make clean
make
echo $?
sudo make install
sudo chown -R web:web /usr/local/servers/
sudo docker stop nginx126
sudo docker start nginx126
sudo docker exec -ti nginx126 /bin/bash
#用最新版
/usr/local/servers/nginx126/sbin/nginx -c /usr/local/servers/nginx126/conf/nginx.conf
ps -ef|grep nginx
rm /usr/local/servers/nginx126/conf/.nginx.conf.swpvi /usr/local/servers/nginx126/conf/nginx.conf
#运行用户
user web;
worker_cpu_affinity auto;
#worker_processes 8;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
pid /usr/local/servers/web/nginx/log/nginx.pid; #我里从新定义了
worker_rlimit_nofile 100000; #更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比'ulimit -a'更多的文件,所以把这个值设高,这样nginx就不会有'too many open files'问题了。
events {
worker_connections 50000; #设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。
multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接。
use epoll; #设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。
}
http {
include mime.types; #只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型
default_type application/octet-stream; # 设置文件使用的默认的MIME-type
map_hash_max_size 10240;
map_hash_bucket_size 320;
########自定义start##########
#限流
#limit_req_zone $http_x_forwarded_for zone=api_limit:10m rate=25r/s; # 定义一个名为 api_limit" 的共享内存区域,大小为 10MB,限制速率为每秒 25 个请求,可以接收25个人的公司同时访问,因为一个公司用的是同一个ip , $remote_addr二进制方式:$binary_remote_addr
#解决502
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
proxy_connect_timeout 300; # 连接超时时间(秒)
proxy_send_timeout 300; # 发送请求超时时间
proxy_read_timeout 300; # 读取响应超时时间
proxy_buffer_size 256k; # 从原来的128k增加到256k
proxy_buffers 8 512k; # 从原来的4个256k缓冲区增加到8个512k缓冲区
reset_timedout_connection on; #告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间
send_timeout 1000; #指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接30
client_max_body_size 20m; #注意:要是以php运行的话,这个大小client_max_body_size要和php.ini中的 post_max_size = 2M upload_max_filesize = 2M 值差不多或者稍大,这样就不会因为提交数据大小不一致出现错误。
error_log /var/log/nginxerror.log;
access_log /var/log/nginx.log; #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
#log_format main '$remote_addr - $http_x_forwarded_for'; #测试代理ip,会被server模块中覆盖,如果配置的话。#格式:X-Forwarded-For: 客户端IP, 代理1IP, 代理2IP ,通过观察,很奇怪: 《引擎服务器ip - 客户端IP, 代理1IP》,完全不兼容,没有不用了
#access_log /var/log/nginx.log main; #日记保存位置,会被server模块中覆盖,如果配置的话
real_ip_header X-Forwarded-For; #真正的X-Forwarded-For头指示Nginx将原始IP地址转发到后端(端口8888),否则所有流量似乎都来自127.0.0.1
########自定义end############
sendfile on; #sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效
#tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送
keepalive_timeout 30; #给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长
keepalive_requests 10000; # 新增:单连接最大请求数
gzip on; #是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 3;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;
gzip_vary on;
gzip_proxied any; # 代理请求也压缩
include /usr/local/servers/web/nginx/vhost/*.conf;
}nginx使用docekr方式安装:http://www.diyyq.com/kaifahuanjing/8.html

发表评论 取消回复