nginx安装与配置详解
安装
CentOS 7.9
安装依赖
[root@ecs ~]# yum install -y gcc pcre-devel openssl-devel安装nginx
[root@ecs ~]# groupadd www && useradd -g www www -s /sbin/nologin [root@ecs ~]# cd /usr/local/src [root@ecs src]# tar -zxvf nginx-1.30.1.tar.gz && cd nginx-1.30.1 [root@ecs src]# ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --user=www --group=www [root@ecs src]# make && make install- nginx安装时依赖pcre、openssl和zlib模块。使用
yum install -y pcre-devel openssl-devel安装这3个模块(安装openssl-devel会安装依赖zlib-devel),nginx会自动查找依赖模块。 - 如果不想安装这些依赖模块,可以使用
--with-pcre=、--with-openssl=和--with-zlib=指定模块源码路径。
模块说明:
模块 说明 pcre 提供正则表达式支持,rewrite模块依赖PCRE库,编译pcre依赖gcc-c++。
下载地址:https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.bz2/downloadopenssl --with-http_ssl_module启用ssl模块,依赖openssl。
下载地址:https://www.openssl.org/source/openssl-1.1.1v.tar.gzzlib 文件压缩和解压缩的库,使用zlib对http数据包进行gzip压缩和解压缩。
下载地址:https://zlib.net/fossils/zlib-1.3.1.tar.gz模块源码安装
[root@ecs ~]# yum install -y bzip2 gcc-c++ [root@ecs ~]# cd /usr/local/src [root@ecs src]# tar -jxvf pcre-8.45.tar.bz2 [root@ecs src]# tar -zxvf openssl-1.1.1v.tar.gz [root@ecs src]# tar -zxvf zlib-1.3.1.tar.gz [root@ecs src]# groupadd www && useradd -g www www -s /sbin/nologin [root@ecs src]# tar -zxvf nginx-1.30.4.tar.gz && cd nginx-1.30.4 [root@ecs src]# ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre=/usr/local/src/pcre-8.45 \ --with-zlib=/usr/local/src/zlib-1.3.1 \ --with-openssl=/usr/local/src/openssl-1.1.1v \ --user=www --group=www [root@ecs src]# make && make install- nginx安装时依赖pcre、openssl和zlib模块。使用
开放防火墙端口
[root@ecs ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent [root@ecs ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent [root@ecs ~]# firewall-cmd --reload开机自启动
[root@ecs ~]# sed -i '/#pid/apid logs/nginx.pid;' /usr/local/nginx/conf/nginx.conf [root@ecs ~]# cat > /usr/lib/systemd/system/nginx.service <<EOF [Unit] Description=The nginx HTTP and reverse proxy server After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install] WantedBy=multi-user.target EOF [root@ecs ~]# chmod a+x /usr/lib/systemd/system/nginx.service [root@ecs ~]# systemctl enable --now nginx设置虚拟主机
[root@ecs ~]# mkdir -p /usr/local/nginx/conf/conf.d [root@ecs ~]# sed -i '/^http {$/,/^}$/ { /^}$/ i\ include /usr/local/nginx/conf/conf.d/*.conf; }' /usr/local/nginx/conf/nginx.conf [root@ecs ~]# mkdir -p /data/{wwwroot,wwwlog} [root@ecs ~]# cat > /usr/local/nginx/conf/conf.d/wiseidc.conf <<EOF log_format wiseidc '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'; server { listen 80; server_name wiseidc.com www.wiseidc.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/wiseidc.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiseidc.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; server_name wiseidc.com www.wiseidc.com; root /data/wwwroot/wiseidc; location / { proxy_pass http://127.0.0.1:8000; 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_set_header X-Forwarded-Proto $scheme; } client_max_body_size 2M; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location / { index index.html index.htm index.php; if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } if (!-e $request_filename) { rewrite ^/index.php/(.*)$ /index.php?$1 last; break; } } access_log /data/wwwlog/wiseidc.log wiseidc; } EOF/^http {$/,/^}$/:匹配第一个http {所在行到第一个}所在行之间的所有行。/A/,/B/ {}:对A到B范围内的行执行{}内的命令。/^}$/ i\:在}所在行前插入。
禁止IP访问
[root@ecs ~]# sed -i '/^[[:space:]]*server[[:space:]]*{/i\ server {\ listen 80;\ server_name localhost;\ deny all;\ }\ ' /usr/local/nginx/conf/nginx.conf或者:
[root@ecs ~]# sed -i '0,/server_name localhost;/{ /localhost;$/a\ deny all; }' /usr/local/nginx/conf/nginx.conf部署网站
[root@ecs wwwroot]# scp root@172.22.159.123:/data/wwwroot/wiseidc.tar.gz /data/wwwroot/ [root@ecs wwwroot]# tar -zxvf wiseidc.tar.gz [root@ecs wwwroot]# chown -R www:www /data/wwwroot/wiseidc [root@ecs wwwroot]# chmod -R 550 /data/wwwroot/wiseidc [root@ecs wwwroot]# cd /data/wwwroot/wiseidc [root@ecs wiseidc]# chmod -R 770 index.html caches/ uploadfile/ phpsso_server/ [root@ecs wiseidc]# echo "open_basedir=/data/wwwroot/wiseidc/:/tmp/" >> .user.ini [root@ecs wiseidc]# chattr +i .user.ini
Ubuntu
apt安装
安装nginx
maisi@ecs:~$ apt-get install nginx maisi@ecs:~$ nginx -v nginx version: nginx/1.18.0 (Ubuntu)启动nginx
maisi@ecs:~$ systemctl enable --now nginx maisi@ecs:~$ systemctl status nginx防火墙放行端口
maisi@ecs:~$ sudo ufw allow 80/tcp maisi@ecs:~$ sudo ufw allow 443/tcp或者:
maisi@ecs:~$ sudo sudo ufw allow http maisi@ecs:~$ sudo sudo ufw allow https常见目录说明
路径 说明 /usr/sbin/nginx 主程序 /etc/nginx 存放配置文件 /usr/share/nginx 存放静态文件 /var/log/nginx 存放日志
源码编译安装
安装依赖
maisi@ecs:~$ apt-get install make gcc zlib1g-dev libpcre3-dev libssl-devUbuntu 26.04
maisi@ecs:~$ apt install zlib1g-dev libpcre2-dev libssl-dev编译nginx
maisi@ecs:~$ groupadd www maisi@ecs:~$ useradd -g www www -s /sbin/nologin maisi@ecs:~$ cd /usr/local/src && tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0 maisi@ecs:/usr/local/src/nginx-1.24.0$ ./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_ssl_module \ --user=www --group=www maisi@ecs:/usr/local/src/nginx-1.24.0$ make && sudo make installnginx安装时依赖
pcre、openssl和zlib模块。使用apt-get安装依赖之后,则无需使用--with-pcre=、--with-openssl=和--with-zlib=指定模块源码路径。Ubuntu 26.04
root@ecs:~# cd /usr/local/src root@ecs:/usr/local/src# tar -jxvf pcre-8.45.tar.bz2 root@ecs:/usr/local/src# tar -zxvf zlib-1.3.2.tar.gz root@ecs:/usr/local/src# tar -zxvf openssl-3.5.7.tar.gz root@ecs:/usr/local/src# groupadd www && useradd -g www www -s /sbin/nologin root@ecs:/usr/local/src# tar -zxvf nginx-1.30.4.tar.gz && cd nginx-1.30.4 root@ecs:/usr/local/src/nginx-1.30.4# ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre=/usr/local/src/pcre-8.45 \ --with-zlib=/usr/local/src/zlib-1.3.2 \ --with-openssl=/usr/local/src/openssl-3.5.7 \ --user=www --group=www root@ecs:/usr/local/src/nginx-1.30.4# make && make install启动nginx
maisi@ecs:~$ sudo /usr/local/nginx/sbin/nginx查看进程
maisi@ecs:~$ ps -ef | grep nginx关闭nginx
maisi@ecs:~$ sudo /usr/local/nginx/sbin/nginx -s stop开启自启动
maisi@ecs:~$ cat > /etc/systemd/system/nginx.service <<EOF [Unit] Description=The nginx HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit [Install] WantedBy=multi-user.target EOF maisi@ecs:~$ chown root:root /etc/systemd/system/nginx.service maisi@ecs:~$ chmod a+x /etc/systemd/system/nginx.service maisi@ecs:~$ systemctl enable --now nginx