1. 安装环境准备

1.1 主机环境准备

1.1.1. 关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

1.1.2. 部署规划

软件安装路径 /usr/local/nginx/
软件日志路径 /usr/local/nginx/logs/
软件二进制路径 /usr/local/nginx/sbin/
软件缓存代理等路径 /usr/local/nginx/{client_body,proxy,fastcgi,uwsgi,scgi}
软件主配置文件路径 /usr/local/nginx/conf
软件子配置文件路径 /usr/local/nginx/conf/conf.d/
端口规划 80

1.1.3. 系统主机时间、时区、系统语言

 本节视实际情况需要操作
 修改时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 修改系统语言环境

echo 'LANG="en_US.UTF-8"' >> /etc/profile && source /etc/profile

 配置主机NTP时间同步

yum -y install ntp
systemctl enable ntpd && systemctl start ntpd
echo 'server ntp1.aliyun.com' >> /etc/ntp.conf
echo 'server ntp2.aliyun.com' >> /etc/ntp.conf

2. Nginx安装部署

备注:2.2章节、2.3章节与2.4章节的依赖包可使用yum直接安装,安装指令如下:

yum install -y pcre-devel zlib-devel openssl-devel

也可按本文档使用源码安装。如何使用yum安装,要注意nginx的安装参数要删除如下三行

--with-pcre=../pcre-8.44 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1g \

2.1 Nginx依赖安装与环境准备

 添加用户与用户组(用户名请自行定义)

groupadd -r nginx && useradd -s /sbin/nologin -r -g nginx nginx

 CentOS平台安装依赖

yum -y install gcc gcc-c++ automake autoconf libtool make wget net-tools
yum install -y libxslt* libxml2* gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data

 下载nginx-1.19.1.tar.gz安装包,并解压

cd /opt
wget http://nginx.org/download/nginx-1.19.1.tar.gz
tar -zxvf nginx-1.19.1.tar.gz

 从根源上隐藏nginx版本号
(1)修改nginx.h文件如下三行配置信息变更,举例如下

vi /opt/nginx-1.19.1/src/core/nginx.h

修改前

#define nginx_version      1019001
#define NGINX_VERSION      "1.19.1"
#define NGINX_VER          "nginx/" NGINX_VERSION

修改后

#define nginx_version      1010001
#define NGINX_VERSION      "618"
#define NGINX_VER          "WEB/" NGINX_VERSION

(2)修改ngx_http_header_filter_module.c文件的ngx_http_server_string显示名称与步骤1中的NGINX_VER名称一致

vi /opt/nginx-1.19.1/src/http/ngx_http_header_filter_module.c

修改前

static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;

修改后

static u_char ngx_http_server_string[] = "Server: WEB" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;

(2)修改ngx_http_special_response.c文件的ngx_http_error_tail显示名称与步骤1中的NGINX_VER名称一致

vi /opt/nginx-1.19.1/src/http/ngx_http_special_response.c

修改前

static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

修改后

static u_char ngx_http_error_tail[] =
"<hr><center>WEB</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

注:修改完成后注意保存配置文件
 Nginx部署环境准备

mkdir -pv /usr/local/nginx/{logs,client_body,proxy,fastcgi,uwsgi,scgi}
chown -R nginx:nginx /usr/local/nginx

2.2 Pcre安装

cd /opt
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar -zxvf pcre-8.44.tar.gz
cd pcre-8.44/
./configure
make && make install

2.3 Zlib安装

cd /opt
wget http://www.zlib.net/fossils/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install

2.4 Openssl安装

cd /opt
wget https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1g.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config
make && make install
openssl version
OpenSSL 1.1.1g  31 Mar 2020

备注:如果openssl版本输入不对应,需要重装

cd openssl-OpenSSL_1_1_1g
./config  --prefix=/usr/local/openssl
make
make install
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib/
ln -s /usr/local/openssl/lib/libcrypto.so.1.1  /usr/local/lib/
ln -s /usr/local/lib/libssl.so.1.1  /usr/lib/
ln -s /usr/local/lib/libcrypto.so.1.1  /usr/lib/
ln -s /usr/local/lib/libssl.so.1.1  /usr/lib64/
ln -s /usr/local/lib/libcrypto.so.1.1  /usr/lib64/
/usr/local/openssl/bin/openssl version
ldd /usr/local/openssl/bin/openssl
ldconfig -v
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
openssl version

nginx安装时则需要指定openssl路径

--with-openssl=../openssl-1.1.1g \

2.5 Nginx安装

cd /opt/nginx-1.19.1
./configure \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid  \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_random_index_module \
--with-http_degradation_module \
--with-http_secure_link_module \
--with-http_gzip_static_module \
--with-http_perl_module \
--with-pcre=../pcre-8.44 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1g \
--with-debug \
--with-file-aio \
--with-mail \
--with-mail_ssl_module \
--http-client-body-temp-path=/usr/local/nginx/client_body \
--http-proxy-temp-path=/usr/local/nginx/proxy \
--http-fastcgi-temp-path=/usr/local/nginx/fastcgi \
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/scgi \
--with-stream \
--with-ld-opt="-Wl,-E"
make && make install

2.6 配置nginx环境变量

cat >>/etc/profile<<EOF
NGINX_HOME=/usr/local/nginx
PATH=\$NGINX_HOME/sbin:\$PATH
EOF
source /etc/profile

2.7 配置nginx系统服务

1、添加nginx系统服务启动脚本

vi /etc/init.d/nginx
#!/bin/bash
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   2345 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
#
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid# Source function library.
. /etc/rc.d/init.d/functions# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/nginx.lockstart() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6echo -n "Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval
}stop() {echo -n "Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval
}restart() {configtest || return $?stopsleep 1start
}rh_status() {status $prog
}rh_status_q() {rh_status >/dev/null 2>&1
}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart)$1;;status)rh_status;;*)echo $"Usage: $0 {start|stop|status|restart}"exit 2;;
esac

2、配置nginx系统服务及自启动

chmod +x /etc/init.d/nginx
chkconfig --add nginx && chkconfig nginx on
chkconfig --list nginx

3、启动与停止nginx服务

service nginx start    或使用  systemctl start nginx
service nginx status    或使用  systemctl status nginx
ps -ef|grep nginx
service nginx stop    或使用  systemctl stop nginx

2.8 配置防火墙

配置操作系统防火墙(端口号根据实际添加)
针对CentOS6:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables save

针对CentOS7:

firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

3. Nginx加固

3.1 安全审计

    启用错误日志
#错误日志
error_log  logs/error.log;
   启用访问日志
#访问日志
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer"''"$http_user_agent" "$http_x_forwarded_for"''"$request_time" "$upstream_response_time"';
#日志缓存access_log  logs/access.log  main buffer=64k flush=60s;open_log_file_cache max=300 inactive=20s valid=1m min_uses=2;

3.2 隐藏nginx版本

 在nginx.conf配置文件中添加隐藏nginx版本的参数

# hide nginx version
server_tokens off;

 在fastcgi.conf配置文件中添加#注释如下配置隐藏php中nginx的版本信息

fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

3.3 数据保密性

 配置防盗链,在nginx.conf对应的server中配置以下参数(根据实际环境需要配置)

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {valid_referers none blocked 域名;if ($invalid_referer) {return 403;break;}access_log off;
}

3.4 配置错误界面

 把error.html放在nginx/html下。在nginx.conf的http中配置以下参数

error_page  404 500 502 503 504 505 /error.html;

3.5 Web前端安全

 防止点击劫持,防止ie内容嗅探,防止xss,只能从本域名加载资源(外部脚本无法执行),在nginx.conf的server中配置以下参数(根据实际环境需要配置)

add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection 1;
#add_header Content-Security-Policy "default-src 'self'";

3.6 https安全

 不使用SSL和TLS1.1以下,使用TLS1.2以上版本,在nginx.conf的server中配置以下参数(在启用https的场景中配置)

SSL_Protocols TLSv1.2;

3.7 访问控制

 限制ip访问(因公网访问nginx,建议不设置。除非有恶意ip尝试cc攻击或暴力破解等非法操作)(根据实际环境需要配置)

location / {deny 192.168.1.1; #拒绝IPallow 192.168.1.0/24; #允许IPallow 10.1.1.0/16; #允许IPdeny all; #拒绝其他所有IP
}

3.8 限制http请求方法

 在nginx.conf的server中配置以下参数,只允许GET、POST两个http请求方式

location / {if ($request_method !~* GET|POST) {return 403;}}

 nginx禁用option方法,将下面语句添加到nginx.conf文件或者server模块中

if ($request_method ~* OPTIONS) {return 404;
}

4. Nginx优化

4.1 Nginx工作进程数量

 一般设置CPU的核心或者核心数x2(worker_processes最多开启8个)

grep ^processor /proc/cpuinfo | wc -l    //获取cpu核心数
worker_processes  4;

4.2 Nginx运行CPU亲和力

    比如2核配置
worker_processes 2;
worker_cpu_affinity 01 10;
   比如4核配置
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;
   比如8核配置
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;

4.3 优化内核参数与连接数

cat >>/etc/sysctl.conf<<EOF
fs.file-max = 6815744
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 40960
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
EOF
sysctl -p
cat >>/etc/security/limits.conf<<EOF
*       soft    nofile      65535
*       hard    nofile      65535
*       soft    noproc      65535
*       hard    noproc      65535
EOF

4.4 Nginx事件处理

 启用epoll模型以提高处理效率

events {use epoll;worker_connections 65535;multi_accept on;
}

4.5 开启高效传输模式

sendfile  on;
tcp_nopush  on;

4.6 连接超时时间

 保护服务器资源,CPU,内存与控制连接数

keepalive_timeout 60;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
client_header_timeout 60;
client_body_timeout 60;
reset_timedout_connection on;
send_timeout 20;
client_max_body_size 10m;

4.7 配置文件专属路径便携配置

不同的服务配置单独的conf文件,提高运维效率,以nginx.conf配置文件添加include参数

mkdir /usr/local/nginx/conf/conf.d
include /usr/local/nginx/conf/conf.d/*.conf;

4.8 Gzip调优

使用gzip压缩功能,可能为我们节约带宽,加快传输速度

gzip on;
gzip_min_length 2k;
gzip_buffers   4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_typestext/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml;
gzip_vary on;
gzip_proxied any;

4.9 Expires缓存调优

缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天。

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {expires 30d;#log_not_found off;access_log off;
}location ~* \.(js|css)$ {expires 7d;log_not_found off;access_log off;
}

5、error.html界面内容

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>网页访问不了</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="404/error_all.css?t=201303212934">
</head>
<body class="error-404">
<div id="doc_main"><section class="bd clearfix"><div class="module-error"><div class="error-main clearfix"><div class="label"></div><div class="info"><h3 class="title">抱歉!该网站可能因为以下原因无法访问!</h3><div class="reason"><p>1.您访问的域名未绑定主机;</p><p>2.您正在使用IP访问,请尝试使用域名访问;</p><p>3.该网站已被网站管理员停止。</p></div></div></div></div></section>
</div></body></html>

6. 结束

nginx安装与调优部署文档(Linux)相关推荐

  1. redis安装包_redis安装与调优部署文档(WinServer)

    1. 安装环境准备 1.1 部署规划 软件安装路径 E:edis bin 二进制路径 etc 配置路径 log 日志路径 data 数据路径 端口规划 6390 2. Redis安装部署 2.1 Re ...

  2. Openmeetings—视频会议部署文档

    Openmeetings-视频会议部署文档 Linux丶晨星关注 0.3182019.11.15 19:48:49字数 1,714阅读 4,463 一.openmeeting简介 OpenMeetin ...

  3. IM开源项目OpenIM部署文档-从准备工作到nginx配置

    IM开源项目OpenIM部署文档-从准备工作到nginx配置 2022-11-14 22:27·OpenIM 一.准备工作 运行环境 linux系统即可, Ubuntu 7.5.0-3ubuntu1~ ...

  4. Django+Linux+Uwsgi+Nginx项目部署文档

    Django+Linux+Uwsgi+Nginx项目部署文档 WSGI 在生产环境中使用WSGI作为python web的服务器 WSGI:全拼为Python Web服务器网关接口,Python We ...

  5. django+nginx+uwsgi项目部署文档整理

    django+nginx+uwsgi项目部署文档整理 参考文章:https://blog.csdn.net/qq_42314550/article/details/81805328 一.python安 ...

  6. linux下单Nginx部署文档

    Linux下单Nginx部署文档 一.常规步骤 1 安装Nginx集群依赖 yum -y install pcre-devel openssl-devel gcc lrzsz openssh-clie ...

  7. linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...

    本文档的主要内容详细介绍的是受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明. 从was9.0开始支持的最低版本的red hat Linux系统为6.6且仅支持64位操作系统 计 ...

  8. centos7安装rabbitmq_rabbitmq v3.7.16安装部署文档

    RabbitMQ v3.7.16安装部署文档 部署安装过程严格按照官方文档的流程. 前言 软件版本 os centos7(ubuntu也适用,需要替换部分命令) rabbitmq v3.7.16 (r ...

  9. 完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档

    完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档 完整代码下载地址:完整企业官网源码 某工程管理有限公司企业官网 前端 新版 ...

最新文章

  1. Java中重载(overload)和重写(override)
  2. CDN加速服务有什么功能和作用?
  3. Windows.Web.Http.HttpClient.GetStringAsync 总是返回相同的结果
  4. erp二次开发有出路吗_ERP的真正技术瓶颈:详细生产排程!
  5. c/c++整理--c++面向对象(2)
  6. 技术胖1-4季视频复习— (看视频笔记)
  7. c++ jna 数据类型_JNA实战笔记汇总一 简单认识JNA|成功调用JNA
  8. 计算机网络学习笔记(30. DNS记录和消息)
  9. http协议学习系列--深入了解篇
  10. python JEP安装
  11. chrome非常好用的图片放大插件 Imagus
  12. 进制之间的转换(史上最全自己纯手工总结)
  13. JS京东快递单号查询案例
  14. 怎么读书才是善读书?
  15. MySql NTERVAL函数
  16. 【网络安全】入侵防御系统
  17. docker容器网络配置之容器间的链接(默认桥接网络下的links)
  18. NOIP前的刷题记录
  19. scanf与getchar的区别
  20. 解耦、削峰、异步的理解

热门文章

  1. rhel8编译安装axel
  2. PeckShield与MakerDAO达成安全审计战略合作
  3. Splinter入门(十四)API文档
  4. 申请国家标准项目管理专业人员能力评级(CSPM)报名条件有哪些?
  5. IOS OpenGL ES GPUImage 柔光混合 GPUImageSoftLightBlendFilter
  6. 2019年全球品牌500强出炉:科技企业承包前7名,华为排12
  7. Oracle BIEE 总结
  8. Lock 和 AQS
  9. RestEasy介绍
  10. 谷歌云 | 如何正确开放谷歌云的数据库3306端口