ওএস এক্স লগইনে আমি 80 পোর্টে কীভাবে এনজিঙ্ক্স শুরু করব?


24

আমি হোগব্রু ব্যবহার করে এনগিনেক্স ইনস্টল করেছি এবং ইনস্টলেশনটি শেষ করার পরে নিম্নলিখিত বার্তাটি প্রদর্শিত হয়েছিল:

In the interest of allowing you to run `nginx` without `sudo`, the default
port is set to localhost:8080.

If you want to host pages on your local machine to the public, you should
change that to localhost:80, and run `sudo nginx`. You'll need to turn off
any other web servers running port 80, of course.

You can start nginx automatically on login running as your user with:
  mkdir -p ~/Library/LaunchAgents
  cp #{prefix}/org.nginx.nginx.plist ~/Library/LaunchAgents/
  launchctl load -w ~/Library/LaunchAgents/org.nginx.nginx.plist

Though note that if running as your user, the launch agent will fail if you
try to use a port below 1024 (such as http's default of 80.)

কিন্তু আমি চাই nginx, পোর্ট 80 তে, লগইন চলমান এবং আমি খোলা টার্মিনাল ও টাইপ আছে না চান sudo nginxএটা করতে। রেডিস এবং পোস্টগ্রিএসকিউএল ডিলির মতো প্লিস্ট ফাইল থেকে লোড করাতে চাই।

আমি প্লাস্টটিকে /Library/LaunchAgents/ব্যবহারকারীর ফোল্ডারের সমতুল্য থেকে সরিয়ে নিয়েছি এবং এর মালিকানা পরিবর্তন করেছি, ফাইলটিতে userনির্দেশিকা নির্ধারণ করার চেষ্টা করেছি nginx.confএবং কনসোল.এপ-তে একই ত্রুটি বার্তাটি:

nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

(অন্য একটি বার্তা সহ আমাকে জানিয়েছিল যেহেতু nginxসুপার-ব্যবহারকারীর সুযোগ-সুবিধাগুলি ছাড়াই পরিচালিত হয়েছিল, তাই userনির্দেশকে অগ্রাহ্য করা হচ্ছে)


আপনি যখন কোনও লঞ্চডেমন ফোল্ডারে স্থানান্তরিত করেন তখন আপনার প্লাস্ট ফাইলটির "রুট: চাকা" মালিকানা রয়েছে তা নিশ্চিত হয়ে নিন। অন্যথায় প্রবর্তনটি "সন্দেহজনক মালিকানা" এর बीকেজ চালাবে না।
রিসায়াসিন

উত্তর:


12

আমি খুঁজে পেলাম / লাইব্রেরি / লঞ্চডেম্যান্স /

sudo vi /Library/LaunchDaemons/org.nginx.nginx.plist

অথবা, আপনি যদি এটি লগইন করে চালু করতে চান তবে আপনি এটি pl / লাইব্রেরি / লঞ্চআজেন্টস / একই প্লিস্ট ফাইলটিতে রাখতে পারেন। এটি আপনাকে sudo কল করার প্রয়োজন ছাড়াই আপনার ব্যবহারকারীর নাম থেকে লঞ্চ করা লঞ্চক্টেল কমান্ডটি অ্যাক্সেস করার অনুমতি দেবে।

এবং নিম্নলিখিতটি সন্নিবেশ করান (আপনার এনগিনেক্স ইনস্টল করার পাথ এবং আপনার ব্যবহারকারীর নামটির জন্য ব্যবহারকারীর নাম অবশ্যই নিশ্চিত করুন):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>nginx</string>
    <key>Program</key>
    <string>/usr/local/Cellar/nginx/1.6.2/bin/nginx</string>
    <key>KeepAlive</key>
    <true/>
    <key>NetworkState</key>
    <true/>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>UserName</key>
    <string>yourusername</string>
</dict>
</plist>

এটি একটি দরকারী উত্তর, তবে প্রযুক্তিগতভাবে এটি লগইন না করে বুটে এনজিনেক্স শুরু করে। @ ব্রাইসন যদি কোনও নির্দিষ্ট জিইআইআই অ্যাকাউন্টে লগ ইন করার পরে কেবল এটি চালিত করতে চায় তবে এটি সঠিক সঠিক উত্তর নয়। তবে আমার সন্দেহ হয় যে মেশিনটি বুট হওয়ার সাথে সাথেই তিনি সত্যিই এটি চালু রাখতে চান, জিইউআই লগইন উইন্ডোতে অপেক্ষা করছে না, যতক্ষণ না সে আসলে লগইন না করে
স্পিফ

আমি এটা যোগ করা ~/Library/LaunchAgents/এবং আমি কনসোলে নিম্নলিখিত ত্রুটি পাবেন: 3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Unknown key for boolean: NetworkState 3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Ignored this key: UserName 3/30/13 9:39:24.047 AM com.apple.launchd.peruser.501[884]: (nginx) Ignored this key: UserName। আমি Programস্ট্রিং পরিবর্তন /usr/local/Cellar/nginx/1.2.7/sbin/nginxযদি এটি গুরুত্বপূর্ণ।
হবিস 3

3
প্রকৃতপক্ষে আমি কেবল আসলটি নিয়েছি , তারপরে homebrew.mxcl.nginx.plistপরিবর্তিত UserNameহয়ে দৌড়েছি এবং এটি কার্যকর। rootsudo chown rootsudo launchctl load -w
হবিস 3

আমি কি কেবল যাচাই করতে পারি - আপনার Library / লাইব্রেরি / লঞ্চআজেন্টস / এ একটি তালিকাভুক্ত তালিকা রয়েছে (সুতরাং এটি কেবলমাত্র একজন ব্যবহারকারীর জন্য) তবে এটি মূল হিসাবে শুরু হয়? ডকুমেন্টেশনে উল্লিখিত সম্ভাবনাটি আমি কখনই দেখিনি এবং যখন আমি এটি ম্যাভারিক্সে চেষ্টা করেছি তখন এটি ব্যর্থ হয়েছিল।
পিটারো

@ হবিস 3 @ সমৃদ্ধ-ক্রোল প্রায় এক বছর পরে তবে কিপএলাইভ হয় সত্য হতে পারে, বা এমন একটি ডিকের সাথে সেট করতে পারে যাতে নেটওয়ার্কস্টেট রয়েছে। সুতরাং উপরের উদাহরণটিতে বলা উচিত <key>KeepAlive</key><dict><key>NetworkState</key><true/></dict>(নোট করুন যে আমি কীপলাইভকে trueনেটওয়ার্ক স্টেটযুক্ত অভিধানের সাথে প্রতিস্থাপন করেছি )। সূত্র: বিকাশকারী.অ্যাপল.
com

9

আমি এখানে এসেছি কারণ আমি একই সমস্যায় পড়ছিলাম। আমার সমাধানটি রিচের উপরের মতই ছিল, আমি হোমব্রুউ এনজিএনএক্স স্টার্টআপ স্ক্রিপ্টটি বাদ দিয়ে:

sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/

রেফারেন্সের জন্য, এখানে homebrew.mxcl.nginx.plist দেখতে কেমন:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>homebrew.mxcl.nginx</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>UserName</key>
    <string>root</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/nginx</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
  </dict>
</plist>

এনজিএনএক্স শুরু করা এবং থামানো আরও সহজ করার জন্য আমার আমার / HOM /। প্রোফাইলে 2 টি উপাধ যুক্ত হয়েছে।

# Nginx needs to bind to port 80 so must run as /Library/LaunchDaemon with sudo
alias start-nginx='sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'
alias stop-nginx='sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist'

আমার সমস্যাটি ছিল যে কোনও কারণে এনজিনেক্স শুরুতে সঠিকভাবে শুরু হয়নি। এটিকে আনলোড করার জন্য আমাকে কেবল স্টপ-এনজিনেক্স চালাতে হয়েছিল, এবং তারপরে আবার স্টার্ট-এনজিনেক্স দিয়ে এটি পুনরায় শুরু করতে হবে।


4
বিকল্প : lunchy restart nginx, github.com/mperham/lunchy দেখুন
Andrei

1

আপনার প্রশ্নের সঠিক উত্তর নয় , তবে যথেষ্ট পরিমাণে কাছে আসতে পারে: আপনি প্যাকেটফিল্টার ব্যবহার করে 80 বন্দর 8080 বন্দরতে পুনর্নির্দেশ করতে পারেন pf(ওএস এক্স 10.9 তে পরীক্ষা করেছেন)। আপনার নিচের লাইনটি যুক্ত করুন /etc/pf.conf(এটি ফিল্টারিংয়ের নিয়মের উপরে আসতে হবে):

rdr pass on lo0 inet proto tcp from any to any port http -> localhost port 8080

(বেশিরভাগ) এই লাইনের উপাদানগুলির একটি ব্যাখ্যা এখানে পাওয়া যাবে

আরও তথ্যের জন্য, /superuser//a/521803 এবং http://www.openbsd.org/faq/pf/index.html দেখুন , যদিও পরবর্তীটি একটি নতুন সংস্করণ বর্ণনা করে বলে মনে হচ্ছে pf, যা প্রদত্ত লাইন অন্যভাবে লেখা হবে।


0

আমি দুটি ব্যাখ্যা সম্পর্কে চিন্তা করতে পারি:

  1. আপনার .plistফাইলে এর মতো কিছু লাইন রয়েছে :

    <key>Username</key>
    <string>some_user</string>
    

    এটি লঞ্চ করাটিকে মূল ব্যবহারের পরিবর্তে নির্দিষ্ট ব্যবহারকারীর সুবিধার্থে লঞ্চ করতে বলে।

    আপনি যদি nginx 80 বন্দরটি আবদ্ধ করতে চান তবে আপনার নামটি .plist পরিবর্তে nginx এর ব্যবহারকারীর নির্দেশিকায় সেট করা উচিত । nginx এর পরে কর্মী প্রক্রিয়াগুলির জন্য সুবিধাগুলি ছাড়বে, যদিও মাস্টার প্রক্রিয়াটি এখনও মূল হবে।

  2. আপনি একটি nginx আছে .plistমধ্যে ~/Library/LaunchAgents/(নোট নেতৃস্থানীয় ~বদলে) /Library/LaunchAgents

    নোট করুন যে .plists সক্রিয় এবং নিষ্ক্রিয় করা সম্ভব, সুতরাং এটি আপনার সিস্টেমে দুটি nginx .plists থাকতে পারে, তবে এর মধ্যে কেবল একটিই সক্রিয়।


0

আমি পাওয়ার সার্ভার থেকে অনুপ্রেরণা নিয়েছি এবং একটি প্লিস্ট তৈরি করেছি যা পোর্ট ফরওয়ার্ডিং সেট করে। এটি 8080 বন্দর 8080, এবং পোর্ট 443 4545 বন্দরে ফরওয়ার্ড করে। এইভাবে আমি একটি সাধারণ ব্যবহারকারীর অধীনে nginx চালাতে পারি এবং আমার সমস্ত সংযোগগুলি স্বচ্ছভাবে কাজ করে।

প্লিষ্টটি এখানে রয়েছে: https://gist.github.com/stefansundin/f0ad99195333480157ce67e97c8d28c7

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.