<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nginx &#8211; Lhy&#039;s blog</title>
	<atom:link href="https://blog.lhyshome.com/tag/nginx/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.lhyshome.com</link>
	<description>welcome</description>
	<lastBuildDate>Fri, 16 May 2025 06:21:33 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">219834889</site>	<item>
		<title>基于pdf.js的pdf在线预览</title>
		<link>https://blog.lhyshome.com/2024/08/15/205/</link>
					<comments>https://blog.lhyshome.com/2024/08/15/205/#respond</comments>
		
		<dc:creator><![CDATA[lhy]]></dc:creator>
		<pubDate>Thu, 15 Aug 2024 01:47:11 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[小技巧]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[pdfjs]]></category>
		<guid isPermaLink="false">https://blog.lhyshome.com/?p=205</guid>

					<description><![CDATA[下载 官方下载地址 https://mozilla.github.io/pdf.js/getting_star… <span class="read-more"><a href="https://blog.lhyshome.com/2024/08/15/205/">Read More &#187;</a></span>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">下载</h2>



<p>官方下载地址</p>



<p>https://mozilla.github.io/pdf.js/getting_started</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="718" src="https://blog.lhyshome.com/wp-content/uploads/2024/08/image-1024x718.png" alt="" class="wp-image-206" srcset="https://blog.lhyshome.com/wp-content/uploads/2024/08/image-1024x718.png 1024w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-300x210.png 300w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-768x539.png 768w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-500x351.png 500w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-800x561.png 800w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-1280x898.png 1280w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-660x463.png 660w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image-200x140.png 200w, https://blog.lhyshome.com/wp-content/uploads/2024/08/image.png 1286w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>选择modern browsers（chrome,edge,firefox浏览器可选）</p>



<h2 class="wp-block-heading">服务器</h2>



<h3 class="wp-block-heading">解压</h3>



<p>下载后pdfjs-4.5.136-dist.zip文件，解压后上传至服务器，或者上传服务器后解压</p>



<h3 class="wp-block-heading">nginx配置</h3>



<h4 class="wp-block-heading">conf文件配置</h4>



<pre class="wp-block-code"><code>server {
    listen 9099;

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        root   /home/pdfjs/pdfjs-4.5.136-dist;
    }
}</code></pre>



<h4 class="wp-block-heading">mime.types文件配置</h4>



<pre class="wp-block-code"><code>application/x-freemarker                         ftl;
application/javascript                           js mjs;</code></pre>



<h4 class="wp-block-heading">nginx重新加载</h4>



<pre class="wp-block-code"><code>/sbin/nginx -s reload</code></pre>



<h4 class="wp-block-heading">端口</h4>



<pre class="wp-block-code"><code># 对服务器9099端口在防火墙上放行
firewall-cmd --zone=public --add-port=9099/tcp --permanent
firewall-cmd --reload</code></pre>



<h2 class="wp-block-heading">预览文件成功</h2>



<p>http://192.168.0.201:9099/web/viewer.html?file=http%3A%2F%2F192.168.0.200%3A5244%2Fp%2FDownloads%2F%25E4%25BA%258E%25E6%259D%25A8%25E7%25A4%25BE%25E5%25B7%25A5%25E8%25AF%25BE%25E8%25AE%25B2%25E4%25B9%2589%25E6%25B1%2587%25E6%2580%25BB%2520%25281%2529.pdf%3Fsign%3DDmtLD17dOgmIdP7c231UksnukX5q44uv-b_A8VVyip8%3D%3A0</p>



<h2 class="wp-block-heading">后续docker部署</h2>



<p>也可以用docker部署，即使用nginx为基板，将当前dist文件搞到nginx基础镜像里，制作为新的镜像，服务器防火墙对映射端口放行，即可实现docker部署，只是作者偷懒了，不想搞。</p>



<p>优点是docker部署方便，维护方便</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.lhyshome.com/2024/08/15/205/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">205</post-id>	</item>
		<item>
		<title>如何将内网的服务用域名访问</title>
		<link>https://blog.lhyshome.com/2024/07/25/192/</link>
					<comments>https://blog.lhyshome.com/2024/07/25/192/#respond</comments>
		
		<dc:creator><![CDATA[lhy]]></dc:creator>
		<pubDate>Thu, 25 Jul 2024 01:47:03 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[小技巧]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[内网穿透]]></category>
		<category><![CDATA[域名]]></category>
		<guid isPermaLink="false">https://blog.lhyshome.com/?p=192</guid>

					<description><![CDATA[本次所需 域名，云服务器（为了云服务器的公网IP），内网穿透工具。本贴域名与云服务器皆为阿里云系。云服务器安装… <span class="read-more"><a href="https://blog.lhyshome.com/2024/07/25/192/">Read More &#187;</a></span>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">本次所需</h2>



<p>域名，云服务器（为了云服务器的公网IP），内网穿透工具。本贴域名与云服务器皆为阿里云系。云服务器安装nginx，和内网穿透工具服务端。</p>



<h2 class="wp-block-heading">部署操作</h2>



<h3 class="wp-block-heading">阿里云</h3>



<p class="has-text-align-left">在阿里云的云解析DNS上将已有二级域名（eg.： example.com）解析为三级域名（eg.：alist.example.com）方便后续操作。记录值设为已有云服务器公网IP地址。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="300" src="https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-1024x300.png" alt="" class="wp-image-193" srcset="https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-1024x300.png 1024w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-300x88.png 300w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-768x225.png 768w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-1536x450.png 1536w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-500x147.png 500w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-800x235.png 800w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-1280x375.png 1280w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4-660x194.png 660w, https://blog.lhyshome.com/wp-content/uploads/2024/07/image-4.png 1910w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">内网穿透工具</h3>



<p>登录云服务器上部署的内网穿透工具后台，将内网的IP和端口映射到服务器上的具体某一端口。</p>



<p>eg.：将内网端口映射到服务器的8080端口</p>



<h3 class="wp-block-heading">云服务器</h3>



<p>在nginx里添加对应配置脚本，将nginx的80端口（或其他端口）代理到内网映射的对应端口上</p>



<pre class="wp-block-code"><code>upstream example {
    server 127.0.0.1:8080 ;
}

server {
    listen 80;
    server_name alist.example.com;
    location / {
       proxy_pass http://example;
    }
}</code></pre>



<h2 class="wp-block-heading">结束</h2>



<p>即可以通过访问alist.example.com域名可以访问到服务器的对应端口，再经由内网穿透工具访问到内网的具体服务上。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.lhyshome.com/2024/07/25/192/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">192</post-id>	</item>
		<item>
		<title>将ruoyi前后端分离版本配置Jenkins流水线</title>
		<link>https://blog.lhyshome.com/2024/05/13/84/</link>
					<comments>https://blog.lhyshome.com/2024/05/13/84/#respond</comments>
		
		<dc:creator><![CDATA[lhy]]></dc:creator>
		<pubDate>Mon, 13 May 2024 08:19:54 +0000</pubDate>
				<category><![CDATA[java]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[dockerFile]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[nginx]]></category>
		<guid isPermaLink="false">https://blog.lhyshome.com/?p=84</guid>

					<description><![CDATA[所需中间件 Jenkins+harbor+nexus+docker+k8s Jenkins执行流水线脚本命令 … <span class="read-more"><a href="https://blog.lhyshome.com/2024/05/13/84/">Read More &#187;</a></span>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">所需中间件</h2>



<p>Jenkins+harbor+nexus+docker+k8s</p>



<p>Jenkins执行流水线脚本命令</p>



<p>harbor维护管理docker镜像</p>



<p>nexus维护私有maven依赖</p>



<p>docker创建服务各个版本的docker镜像</p>



<p>k8s部署服务镜像</p>



<h2 class="wp-block-heading">后端：</h2>



<h3 class="wp-block-heading">Jenkins流水线脚本</h3>



<pre class="wp-block-code"><code>pipeline {
    agent none
    environment {
        FLAG = 'ruoyigatewaydev'
    }
    options {
        timeout(time:25, unit: 'MINUTES')
    }
    stages {
        stage('Build Package') {
            agent {
                docker {
                    image 'maven:3.6.1-jdk-8'
                    args '-v /var/lib/jenkins/repository:/repository '
                }
            }
            steps {
                git branch: 'dev',
                        credentialsId: 'gitlab_local_pwd',
                        url: 'http://git_ip:git_port/lhy/ruoyi-gateway.git'
                sh '''
                mvn -s settings.xml -Dmaven.repo.local=/repository -B clean package -DskipTests=true
                '''
            }
        }
        stage('Build image and Push') {
            agent any
            environment {
                IMAGE_TAG = sh(returnStdout: true,script: 'echo $image_tag').trim()
            }
            steps {
                sh """	
					docker build -t harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG} ./
					docker push harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
					docker image rm harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
                   """
            }
        }

        stage('Deploy') {
            agent any
            steps {
                script{
                    def remote = &#91;:]
                    remote.name = 'kube'
                    remote.host = 'k8s_ip'
                    remote.port = 22
                    remote.allowAnyHosts = true
                    //通过withCredentials调用Jenkins凭据中已保存的凭据，credentialsId需要填写，其他保持默认即可
                    withCredentials(&#91;usernamePassword(credentialsId: 'Vm_local_pwd', passwordVariable: 'password', usernameVariable: 'userName')]) {
                        remote.user = "${userName}"
                        remote.password = "${password}"
                    }
                    sshCommand remote: remote, command: """ 
                        if &#91; ! -d '/home/ruoyi/${FLAG}' ];then 
                        mkdir /home/ruoyi/${FLAG}
                        else
                        echo "文件夹已经存在"
                        fi
    				   """
                    sshPut remote: remote, from: 'k8s.yaml', into: "/home/ruoyi/${FLAG}"
                    sshCommand remote: remote, command: """ 
    					sed -i 's#${FLAG}:.*#${FLAG}:${IMAGE_TAG}#g' /home/ruoyi/${FLAG}/k8s.yaml
    					kubectl apply -f /home/ruoyi/${FLAG}/k8s.yaml
    					rm -rf /home/ruoyi/${FLAG}/k8s.yaml
    				   """
                }
            }
        }
    }
}</code></pre>



<h3 class="wp-block-heading">k8s.yml</h3>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyigateway
  namespace: ruoyi-dev
  labels:
    app: ruoyigateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyigateway
  template:
    metadata:
      name: ruoyigateway
      labels:
        app: ruoyigateway
    spec:
      containers:
        - name: ruoyigateway
          image: harbor_ip:harbor_port/public/ruoyigatewaydev:7.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: containerPort
              protocol: TCP
      restartPolicy: Always
      imagePullSecrets:
        - name: harbor-lhy

---
apiVersion: v1
kind: Service
metadata:
  name: ruoyigateway
  namespace: ruoyi-dev
spec:
  selector:
    app: ruoyigateway
  ports:
    - protocol: TCP
      port: port
      targetPort: targetPort
      nodePort: nodePort
  type: NodePort
</code></pre>



<h3 class="wp-block-heading">DockerFile</h3>



<pre class="wp-block-code"><code>FROM openjdk:8-jre<br>LABEL authors="lhyshome_pc"<br>ADD target/ruoyi-gateway.jar app.jar<br>ENTRYPOINT &#91;"java","-jar","/app.jar"]</code></pre>



<h2 class="wp-block-heading">前端</h2>



<h3 class="wp-block-heading">Jenkins流水线脚本</h3>



<pre class="wp-block-code"><code>pipeline {
    agent none
    environment {
        FLAG = 'ruoyiuidev'
    }
    options {
        timeout(time:25, unit: 'MINUTES')
    }
    stages {
        stage('npm') {
            agent {
                docker {
                    image 'node:14'
                    args '-u root:root --network=host'
                }
            }
            steps {
                git branch: 'dev',
                credentialsId: 'gitlab_local_pwd',
                url: 'http://git_ip:git_port/lhy/ruoyi-ui.git'
                sh """
                    npm install &amp;&amp; npm run build:stage
                """
            }
        }
        stage('Build image and Push') {
            agent any
            environment {
                IMAGE_TAG = sh(returnStdout: true,script: 'echo $image_tag').trim()
            }
            steps {
                sh """	
					docker build -t harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG} ./
					docker push harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
					docker image rm harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
                   """
            }
        }
        stage('Deploy') {
            agent any
            steps {
                script{
                    def remote = &#91;:]
                    remote.name = 'kube'
                    remote.host = 'k8s_ip'
                    remote.port = 22
                    remote.allowAnyHosts = true
                    //通过withCredentials调用Jenkins凭据中已保存的凭据，credentialsId需要填写，其他保持默认即可
                    withCredentials(&#91;usernamePassword(credentialsId: 'Vm_local_pwd', passwordVariable: 'password', usernameVariable: 'userName')]) {
                        remote.user = "${userName}"
                        remote.password = "${password}"
                    }
                    sshCommand remote: remote, command: """ 
                        if &#91; ! -d '/home/ruoyi/${FLAG}' ];then 
                        mkdir /home/ruoyi/${FLAG}
                        else
                        echo "文件夹已经存在"
                        fi
    				   """
                    sshPut remote: remote, from: 'k8s.yaml', into: "/home/ruoyi/${FLAG}"
                    sshCommand remote: remote, command: """ 
    					sed -i 's#${FLAG}:.*#${FLAG}:${IMAGE_TAG}#g' /home/ruoyi/${FLAG}/k8s.yaml
    					kubectl apply -f /home/ruoyi/${FLAG}/k8s.yaml
    					rm -rf /home/ruoyi/${FLAG}/k8s.yaml
    				   """
                }
            }
        }
    }
}</code></pre>



<h3 class="wp-block-heading">k8s.yml</h3>



<pre class="wp-block-preformatted">apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br>  name: ruoyiui<br>  namespace: ruoyi-dev<br>spec:<br>  replicas: 1<br>  selector:<br>    matchLabels:<br>      app: ruoyiui<br>  template:<br>    metadata:<br>      labels:<br>        app: ruoyiui<br>    spec:<br>      containers:<br>        - name: ruoyiui<br>          image: harbor_ip:harbor_port/public/ruoyiuiprod:9.0<br>          ports:<br>            - containerPort: containerPort<br>---<em><br></em>apiVersion: v1<br>kind: Service<br>metadata:<br>  name: ruoyiui<br>  namespace: ruoyi-dev<br>spec:<br>  type: LoadBalancer<br>  selector:<br>    app: ruoyiui<br>  ports:<br>    - protocol: TCP<br>      port: port<br>      targetPort: targetPort<br>      nodePort: nodePort</pre>



<h3 class="wp-block-heading">DockerFile</h3>



<pre class="wp-block-code"><code>FROM nginx:1.14.1
ADD ./dist /home
ADD ./nginx.conf /etc/nginx
EXPOSE 80
CMD &#91;"nginx", "-g", "daemon off;"]</code></pre>



<h3 class="wp-block-heading">nginx.conf</h3>



<pre class="wp-block-code"><code>worker_processes  1;<br><br>events {<br>    worker_connections  1024;<br>}<br><br>http {<br>    include       mime.types;<br>    default_type  application/octet-stream;<br>    sendfile        on;<br>    keepalive_timeout  65;<br><br>    server {<br>        listen       80;<br>        server_name  localhost;<br><br>        location / {<br>            root   /home;<br>            try_files $uri $uri/ /index.html;<br>            index  index.html index.htm;<br>        }<br><br>        # 避免actuator暴露<br>        if ($request_uri ~ "/actuator") {<br>            return 403;<br>        }<br><br>        error_page   500 502 503 504  /50x.html;<br>        location = /50x.html {<br>            root   html;<br>        }<br>    }<br>}</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.lhyshome.com/2024/05/13/84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">84</post-id>	</item>
	</channel>
</rss>
