联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:15339554450 QQ:957308166

nginx源码编译安装+致远OAhttps部署

nginx源码编译
nginx安装部署及OAhttp和https反向代理设置

一、下载nginx及相关依赖文件包并检查gcc与gcc-c++是否安装

  1. Nginx,参考下载链接(建议下载 stable version):http://nginx.org/en/download.html

  2. nginx-sticky-module,参考下载链接:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/

  3. pcre,参考下载链接:https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz

  4. openssl,参考下载链接:https://www.openssl.org/source/

  5. zlib,参考下载链接:https://zlib.net/

  6. 检查gcc与gcc-c++是否已安装 yum list installed | grep gcc gcc-c++ yum install -y perl perl-devel gcc gcc-c++

 

二、解压nginx安装包及相关以来二进制文件

  1. 将所有下载的二进制包和zip包上传至服务器二进制存放路径里进行解压,路径自建,本文档中所有建立的二进制文件存放路径为/seeyon/Nginx,安装路径为/seeyon/nginx。==注:存放路径和安装路径不可放在同一目录!==

  2. 解压二进制文件

tar -zxvf nginx-1.xx.x.tar.gz # x代表版本信息,已下载的各自版本为准;
tar -zxvf pcre-x.xx.tar.gz
tar -zxvf zlib-x.xx.xx.tar.gz
tar -zxvf openssl-x.x.x.tar.gz
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
# 修改解压好的文件名,便于后续安装
mv nginx-1.xx.x nginx
mv pcre-x.xx pcre
mv zlib-x.xx.xx zlib
mv openssl-x.x.x openssl
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module
  1. 提权文件夹权限

chmod -R 777 nginx
chmod -R 777 pcre
chmod -R 777 zlib
chmod -R 777 openssl
chmod -R 777 nginx-sticky-module
  1. 安装nginx

cd /seeyon/Nginx/nginx # 进入nginx文件夹
./configure --prefix=/seeyon/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_auth_request_module --with-http_random_index_module --with-http_gzip_static_module --with-pcre=/seeyon/Nginx/pcre --add-module=/seeyon/Nginx/nginx-sticky-module --with-openssl=/seeyon/Nginx/openssl --with-zlib=/seeyon/Nginx/zlib  
# 安装nginx及相关依赖

# 安装完成后进行编译安装
make
make install

== 注如编译过程中遇到问题,自行百度解决 ==

三、配置nginx代理OAhttp服务

  1. 已nginx安装在/seeyon/nginx下为例,nginx配置文件位于/seeyon/nginx/conf/nginx.conf。配置文件内容如下:

worker_processes auto; 
worker_rlimit_nofile 20960; 
error_log logs/error.log crit;
	events {
	worker_connections 4096;
	multi_accept on; 
	accept_mutex on;
	accept_mutex_delay 500ms; 
}
	http {
		server_tokens off;
		sendfile on;
		tcp_nopush on; 
		tcp_nodelay on;
		access_log off;
		include mime.types;
		default_type application/octet-stream;
		keepalive_timeout 300;
		client_max_body_size 10240M;
		gzip on;
		gzip_min_length 1k;
		gzip_buffers 4 16k;
		gzip_comp_level 3;
		gzip_types text/xml text/plain text/css text/javascript application/x-javascript 
		application/javascript application/xml;
		gzip_disable "MSIE [1-6]\.";
			upstream seeyon_v5_cluster{
				sticky;
				server 192.168.31.110:8080 max_fails=300 fail_timeout=30s; # 192.168.31.110为OA地址 8080为OA使用的端口
				#server 192.168.0.2:80 max_fails=300 fail_timeout=30s;
			}
			server {
				listen 80;
				server_name localhost;
				charset utf-8;
				location / {
				proxy_pass http://seeyon_v5_cluster;
				proxy_set_header Host $host:$server_port;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header REMOTE-HOST $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				# proxy_set_header X-Forwarded-Proto $scheme;
				proxy_redirect off; 
				proxy_connect_timeout 300;
				proxy_read_timeout 300;
				proxy_send_timeout 300;
			}
				error_page 500 502 503 504 /50x.html;
				location = /50x.html {
				root html;
			}
		}
}

# 修改配置文件后在nginx的启动目录下检查nginx.conf是否合理   seeyon/nginx/sbin  ./nginx -t
  1. 配置开启https访问

==注意== 开启https需要购买证书,腾讯、阿里云等云服务器可以申请免费证书,如虚拟机等安装体验可使用openssl生成自签名证书,自签名证书可参考:nginx生成ssl证书 - me小怪兽 - 博客园 (cnblogs.com)

server {
				listen 443 ssl;
				ssl_certificate ssl/server.crt; 
				ssl_certificate_key ssl/server.key; 
				ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
				ssl_prefer_server_ciphers on; #协议加密握手参数,建议必加,不然可能无法进行登录!!
				
				location / {
				proxy_pass http://seeyon_v5_cluster;
				proxy_set_header Host $host:$server_port;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header REMOTE-HOST $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				# proxy_set_header X-Forwarded-Proto $scheme;
				proxy_set_header X-Forwarded-Proto https;
				proxy_redirect off; 
				proxy_connect_timeout 300;
				proxy_read_timeout 300;
				proxy_send_timeout 300;
				}
			}
# 修改配置文件后在nginx的启动目录下检查nginx.conf是否合理   seeyon/nginx/sbin  ./nginx -t
  1. OA配置https重定向

server {
				listen 443 ssl;
				server_name localhost; #域名或IP  
				ssl_certificate ssl/server.crt; 
				ssl_certificate_key ssl/server.key; 
				ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
				ssl_prefer_server_ciphers on; ssl协议握手参数,高版本OA必加
				
				location / {
				proxy_pass http://seeyon_v5_cluster;
				proxy_set_header Host $host:$server_port;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header REMOTE-HOST $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header X-Forwarded-Proto $scheme;
      		proxy_set_header Upgrade $http_upgrade;
      		proxy_set_header Connection $connection_upgrade;
				proxy_redirect off; 
				proxy_connect_timeout 300;
				proxy_read_timeout 300;
				proxy_send_timeout 300;
				}
			
			}
			server {
				listen 80;
				server_name localhost; #域名或IP
				charset utf-8;
			
				location / {
            rewrite ^(.*)$ https://$host$1 permanent;
        } #访问IP或域名按实际设置
			}
# 修改配置文件后在nginx的启动目录下检查nginx.conf是否合理   seeyon/nginx/sbin  ./nginx -t

 

  1. OA配置文件修改ApacheJetspeed/conf下的==server.xml==,修改一下内容

<Connector port="8080" executor="tomcatThreadPool" maxHttpHeaderSize="8192" maxPostSize="-1" maxSwallowSize="-1" acceptCount="1024" maxThreads="4096" minSpareThreads="100" enableLookups="false" redirectPort="443" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/css,text/javascript,text/plain,application/vnd.ms-fontobject,application/javascript,application/json" connectionTimeout="20000" disableUploadTimeout="true" protocol="HTTP/1.1" server="SY8045" /> #修改该代码文件
在port后面加上  proxyPort="443" scheme="https" #具体修改如下

<Connector port="8080" proxyPort="443" scheme="https" executor="tomcatThreadPool" maxHttpHeaderSize="8192" maxPostSize="-1" maxSwallowSize="-1" acceptCount="1024" maxThreads="4096" minSpareThreads="100" enableLookups="false" redirectPort="443" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/css,text/javascript,text/plain,application/vnd.ms-fontobject,application/javascript,application/json" connectionTimeout="20000" disableUploadTimeout="true" protocol="HTTP/1.1" server="SY8045" /> #修改该代码文件
<!--由于高版本OA使用tomcat有变化,需在该位置在增加https内容-->
原内容:
<Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false" errorReportValveClass="com.seeyon.tomcat.CustomErrorValue">
	
修改后内容:
	<Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false" errorReportValveClass="com.seeyon.tomcat.CustomErrorValue">
增加下方对于
     <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For"  
     protocolHeader="X-Forwarded-Proto"  protocolHeaderHttpsValue="https"  httpsServerPort="4443"/> <!--端口基于上方https的配置端口,要进行一致-->

 

  1. 重启OA服务

cd Seeyon/A8/ApacheJetspeed/bin
./startup.sh

 

四、nginx常用命令

./nginx -t # 检查nginx配置文件是否合规
./nginx # 启动nginx
./nginx -s reload # 重启nginx
./nginx -c /seeyon/nginx/conf/nginx.conf # 指定nginx.conf配置文件启动

fuser -k 80/tcp # 查询占用端口pid

netstat -anput|grep nginx  # 查询所有nginx监听端口

五、注册系统服务使用systemctl进行启动管理

  1. 创建服务脚本

vi /usr/lib/systemd/system/nginx.service
# 服务脚本内容
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/seeyon/nginx/logs/nginx.pid
ExecStartPre=/seeyon/nginx/sbin/nginx -t -c /seeyon/nginx/conf/nginx.conf
ExecStart=/seeyon/nginx/sbin/nginx -c /seeyon/nginx/conf/nginx.conf
ExecReload=/seeyon/nginx/sbin/nginx -s reload
ExecStop=/seeyon/nginx/sbin/nginx -s stop
ExecQuit=/seeyon/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 重新加载系统服务

systemctl daemon-reload
  1. 设置nginx开机自启动

systemctl enable nginx

 

六、编译问题

如使用的openssl较高,例如openssl-3.3.1等或更高的版本,需要安装 Perl模块IPC::Cmd,openssl-3.3.1编译需要此模块内容,否则编译过程报错。
解决方式:

yum install -y  kernel-devel perl-CPAN
# 安装完成后先修改CPAN的镜像源,否则安装模块过程中会出现网络链接问题;

在CPAN配置文件中添加多个镜像源,你可以通过以下几种方式实现,下面分别介绍不同方式的操作步骤。
推荐方式二

方式一:通过CPAN Shell交互添加

  1. 进入CPAN Shell:在终端中输入 cpan 并回车,即可进入CPAN交互界面。

  2. 查看当前镜像源列表:在CPAN Shell中输入 o conf urllist,回车后会显示当前配置的所有镜像源。

  3. 添加新的镜像源

    • 若要将新镜像源添加到列表开头,使用 o conf urllist unshift &#039;镜像源URL&#039; 命令。例如添加清华大学的镜像源,命令为 o conf urllist unshift &#039;https://mirrors.tuna.tsinghua.edu.cn/CPAN/&#039;

    • 若要将新镜像源添加到列表末尾,使用 o conf urllist push &#039;镜像源URL&#039; 命令。例如添加中国科学技术大学的镜像源,命令为 o conf urllist push &#039;https://mirrors.ustc.edu.cn/CPAN/&#039;

  4. 保存配置:添加完所有需要的镜像源后,输入 o conf commit 保存对配置的修改。

  5. 退出CPAN Shell:输入 quitq 退出CPAN交互界面。

方式二:直接编辑CPAN配置文件

  1. 定位配置文件:CPAN的配置文件通常是 ~/.cpan/CPAN/MyConfig.pm (在类Unix系统如Linux、macOS上);在Windows系统上,路径可能类似 C:\Users\你的用户名\.cpan\CPAN\MyConfig.pm

  2. 备份配置文件:为防止修改失误,在编辑前先备份该文件。

  3. 编辑配置文件:用文本编辑器打开 MyConfig.pm,找到 &#039;urllist&#039; 对应的部分,通常格式如下:

    &#039;urllist&#039; => [
        &#039;旧的镜像源URL1&#039;,
        &#039;旧的镜像源URL2&#039;
    ],

    在方括号内按照需求添加新的镜像源URL,每个URL用单引号括起来,并用逗号分隔。例如添加阿里云和清华大学的镜像源:
    &#039;urllist&#039; => [
        &#039;https://mirrors.aliyun.com/CPAN/&#039;,
        &#039;https://mirrors.tuna.tsinghua.edu.cn/CPAN/&#039;,
        &#039;旧的镜像源URL1&#039;,
        &#039;旧的镜像源URL2&#039;
    ],

  4. 保存修改:完成镜像源添加后,保存配置文件。之后再次使用CPAN时就会使用新配置的多个镜像源。

通过上述方法,你可以方便地在CPAN配置文件中添加多个镜像源,提升模块下载的效率和稳定性。

CPAN配置完成后进行IPC::Cmd模块安装

# 进入cpan shell
cpan或者perl -MCPAN -e shell
执行  install IPC/Cmd.pm

等待安装完成后在重新进行nginx的安装跟编译即可。

若安装编译过程遇到提示报错:ngx_http_sticky_module.c: error: &#039;ngx_http_headers_in_t&#039; has no member named &#039;cookies&#039;等,则修改ningx-sticky-module源码包中的ngx_http_sticky_misc.c内容

sed -i "s/ngx_http_parse_multi_header_lines.*/ngx_http_parse_multi_header_lines(r, r->headers_in.cookie, \&iphp->sticky_conf->cookie_name, \&route) != NULL){/g" /home/file/nginx-sticky-module/ngx_http_sticky_misc.c

sed -i &#039;12a #include <openssl/sha.h>&#039; /home/file/nginx-sticky-module/ngx_http_sticky_misc.c
sed -i &#039;12a #include <openssl/md5.h>&#039; /home/file/nginx-sticky-module/ngx_http_sticky_misc.c

修改完成后重新进行编译即可。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册